Sequences - sorokod/Clojure-Notes GitHub Wiki
Testing
every?, not-every?, some?, not-any
(every? number? [1 2 3 :four]) ; false
(some nil? [1 2 nil]) ; true
(not-every? odd? [1 3 5]) ; false
(not-any? number? [:one :two :three]) ; true
Modifying
; ### filter
(def numbers [1 2 3 4])
(filter #(< % 3) numbers) ; (1 2)
; ### map
(map #(* % %) numbers) ; (1 4 9 16)
List comprehension
(def numbers [1 2 3])
(def letters ["a" "b"])
(for [x numbers] (str x)) ; ("1" "2" "3")
(for[x numbers y letters] (str x " " y) ) ; ("1 a" "1 b" "2 a" "2 b" "3 a" "3 b" "4 a" "4 b")
(for[x numbers :when (#(< % 3) x), y letters] (str x " " y) ) ; ("1 a" "1 b" "2 a" "2 b")
Finite seq. - range
(range 1 4) ; (1 2 3)
(range 1 4 2) ; (1 3)
(range 4) ; (0 1 2 3)
Infinite seq.
(take 3 (repeat 1)) ; (1 1 1)
(take 5 (cycle [1 2 ])) ; (1 2 1 2 1)
(take 5 (drop 2 (cycle [1 2 3]))) ; (3 1 2 3 1)
(->> [1 2 3] (cycle) (drop 2) (take 5)) ; (3 1 2 3 1)
; ## interpose
(->> [1 2 3] (cycle) (drop 2) (interpose " X ") (take 4)) ; (3 " X " 1 " X ")
; ## interleave sequences
(take 10 (interleave (cycle (range 2)) (cycle (range 3)))) ; (0 0 1 1 0 2 1 0 0 1) - odds are 0 1 0 1... evens are 0 1 2 0 1 2....
; ## iterate repeatedly applies a function with an initial value
(take 5 (iterate inc 1)) ; (1 2 3 4 5)
(take 5 (iterate dec 0)) ; (0 -1 -2 -3 -4)
; ## fibonacci with iterate
(defn fib-pair [a b](/sorokod/Clojure-Notes/wiki/a-b) [b a+b] )
(take 5
(map
first
(iterate fib-pair [1 1]))) ; (1 1 2 3 5)
; ## 20th fib number
(nth (map first (iterate fib-pair [1 1])) 20) ; 10496
; ## factorial
(defn factorial [n] (apply * (take n (iterate inc 1))))
(factorial 5) ; 120