Ok, I take it back. (no pun intended) I know that this used to be a problem, but looking through my email history, it appears that the over-eager take was reported by Chouser, and subsequently fixed by Rhickey.
On Sat, Jan 31, 2009 at 9:47 AM, André Thieme <splendidl...@googlemail.com> wrote: > > On 31 Jan., 02:44, Daniel Renfer <d...@kronkltd.net> wrote: >> user=> (take 0 (lazy-cat [(println 10)] [(println 20)])) >> 10 >> nil >> >> What you see here is not an issue with lazy-cat, but rather an issue >> with take. The current implementation of take evaluates one more than >> the n passed to it. > > I don't think so: > > (defn take > "Returns a lazy seq of the first n items in coll, or all items if > there are fewer than n." > [n coll] > (when (and (pos? n) (seq coll)) > (lazy-cons (first coll) (when (> n 1) (take (dec n) (rest > coll)))))) > > As we can see (pos? n) is the first thing TAKE does. > As (pos? 0) ==> false the execution of take ends right here. > The (seq coll) is never reached. > > > --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---