lazy-cat infinite realization on empty seq

27 views
Skip to first unread message

michaelr524

unread,
May 31, 2012, 9:14:08 AM5/31/12
to Clojure
Hi,

This has probably been asked a million times but I couldn't find
anything.

Why the following triggers infinite realization of the infinite lazy
seq and how I can work around it and make it stop when f1 returns an
empty seq,

(defn f1 [] (println "hello") [])
(defn f2 [] (lazy-cat (f1) (f2)))

(doseq [a (f2)]
(pprint a))

Thanks,
Michael

Stephen Compall

unread,
Jun 3, 2012, 10:56:04 AM6/3/12
to clo...@googlegroups.com, Clojure
On May 31, 2012, at 9:14 AM, michaelr524 <micha...@gmail.com> wrote:

> Why the following triggers infinite realization of the infinite lazy
> seq

You've catted together an infinite seq of empty seqs, and forcing a lazy seq doesn't stop until either an element or known emptiness is found, whereas you provide neither. Consider: should the following terminate?

(doall (filter #(< % 42) (range)))

> and how I can work around it and make it stop when f1 returns an
> empty seq,

You need a sentinel so you can use take-while, or another code path in f2 that provides the aforementioned termination condition.

--
Stephen Compall
Greetings from sunny Appleton!
Reply all
Reply to author
Forward
0 new messages