]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex2_41.clj
Solution to 4.30. Extremely enlightening!
[sicp.git] / src / sicp / ex2_41.clj
1 (ns sicp.ex2_41
2   (:use [sicp.ch2-2 :only (enumerate-interval accumulate append)]))
3
4 (defn triplets [n]
5   (accumulate append
6               nil
7               (accumulate append
8                           nil
9                           (map (fn [i]
10                                  (map (fn [j]
11                                         (map (fn [k] (list i j k))
12                                              (enumerate-interval 1 (- j 1))))
13                                       (enumerate-interval 1 (- i 1))))
14                                (enumerate-interval 1 n)))))
15
16 (defn sum-triplets [triplet]
17   (accumulate + 0 triplet))
18
19 (defn ordered-triplets [n sum]
20   (filter #(= (sum-triplets %) sum)
21           (triplets n)))