| kyle_burton ( @ 2008-11-18 22:03:00 |
List Comprehensions in Clojure
Just a quick example of list comprehensions in Clojure.
;; generate all the positions on a chess board:
(for [file "ABCDEFGH"
rank (range 1 9)]
(format "%c%d" file rank))
;; ("A1" "A2" "A3" "A4" "A5" "A6" "A7" "A8"
;; "B1" "B2" "B3" "B4" "B5" "B6" "B7" "B8"
;; "C1" "C2" "C3" "C4" "C5" "C6" "C7" "C8"
;; "D1" "D2" "D3" "D4" "D5" "D6" "D7" "D8"
;; "E1" "E2" "E3" "E4" "E5" "E6" "E7" "E8"
;; "F1" "F2" "F3" "F4" "F5" "F6" "F7" "F8"
;; "G1" "G2" "G3" "G4" "G5" "G6" "G7" "G8"
;; "H1" "H2" "H3" "H4" "H5" "H6" "H7" "H8")
(count (for [file "ABCDEFGH"
rank (range 1 9)]
(format "%c%d" file rank)))
;;64
;; the pythagorean triples example:
(for [aa (range 1 10)
bb (range 1 10)
cc (range 1 10)
:when (= (* cc cc)
(+ (* aa aa)
(* bb bb)))]
(list aa bb cc))
;; ((3 4 5) (4 3 5))
;; all permutations?
(defn all-permutations [things]
(if (= 1 (count things))
(list things)
(for [head things
tail (all-permutations (disj (set things) head))]
(do
(cons head tail)))))
(all-permutations '(a b c))
;; ((a c b) (a b c) (b a c) (b c a) (c a b) (c b a))