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