It's obvious that you're looking for:

(def lazy1  (interleave (repeat '+) (range 3)))


but I still haven't figured out why you get:  (+0 +1  2) when using iterate!

Jim



On 06/06/12 11:13, Jim - FooBar(); wrote:
From the docs:

clojure.core/iterate
([f x])
Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects

Your f is NOT free of side-effects...Nonetheless, I would expect (0 +1 +2) instead of (+0 +1 2)!
Can anyone shine some light on this?

Jim

On 06/06/12 10:24, Z.A wrote:
Hi

user=> (def lazy1 (take 3 (iterate #(do (print "+") (inc %)) 0)))
#'user/lazy1
user=> lazy1
(+0    +1     2)

Why am I not getting (+0    +1    +2)   ?

Thanks
Zubair

PS: I am reading chapter 6 of 'The Joy of Clojure' and trying to understand "rest versus next" , pp 116

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to