Sunday, May 25, 2014

Clojure Koans Answers and Explanations - 10 - Lazy Sequences

Let's look at the solutions for the next of Clojure Koans -Lazy Sequences.


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;1
(= __ (range 1 5))
; range is exclusive at the end meaning it is (]
(= '(1 2 3 4) (range 1 5))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;2
(= [0 1 2 3 4 5 6 7 8 9]
     (take __ (range 100)))
; range produces a lazy seq
; we need to 'take' 10 elements
; so
(= [0 1 2 3 4 5 6 7 8 9]
     (take 10 (range 100)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;3
(= [95 96 97 98 99]
     (drop __ (range 100)))
; drop is sound alternative to take
(= [95 96 97 98 99]
     (drop 95 (range 100)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;4
(= __ (take 20 (iterate inc 0)))
; iterate is another function producing lazy
; sequence
(= '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19) (take 20 (iterate inc 0)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;5
(= [:a :a :a :a :a :a :a :a :a :a ]
     (repeat 10 __))
; repeat is another lazy sequence
(= [:a :a :a :a :a :a :a :a :a :a ]
     (repeat 10 :a))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;6
(= (repeat 100 :foo)
     (take 100 (iterate ___ :foo))))
; time for resolving identity crisis
(= (repeat 100 :foo)
     (take 100 (iterate identity :foo)))




No comments:

Post a Comment