iterate

added
1.0

ns
clojure.core

type
function

(iterate f x)

Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects

                ;; iterate Ad Infinitum starting at 5 using the inc (increment) function
user=> (iterate inc 5)
(5 6 7 8 9 10 11 12 13 14 15 ... n

;; limit results
user=> (take 5 (iterate inc 5))
(5 6 7 8 9)

user=> (take 10 (iterate (partial + 2) 0))
(0 2 4 6 8 10 12 14 16 18)

user=> (take 20 (iterate (partial + 2) 0))
(0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38)


            
                user=> (def powers-of-two (iterate (partial * 2) 1))
#'user/powers-of-two

user=> (nth powers-of-two 10)
1024
user=> (take 10 powers-of-two)
(1 2 4 8 16 32 64 128 256 512)

            
                ;; demonstrating the power of iterate
;; to generate the Fibonacci sequence
;; uses +' to promote to BigInt
user=> (def fib (map first (iterate (fn [[a b]] [b (+' a b)]) [0 1])))
#'user/fib

user=> (take 10 fib)
(0 1 1 2 3 5 8 13 21 34)