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