I have a function without arguments which returns a big,complex object
repeatedly until it returns nil.  That is to say that the function
will produce a sequence of objects, but I don't know how many.  I want
to call the generator as a lazy sequence but how do I make such a
thing?

Currently I am doing something like this:

(loop [i (myfunc)]
(if (nil? i) nil ;; we are done here
(let
  ...do a bunch of stuff to i
(recur (myfunc)))

This works okay, but leaves that  recur statement dangling at the end
of the routine. What I would like to do is  the cleaner:

(doseq [ i (myseq)]
 ...do a bunch of stuff to i)

I have tried using (def myseq (repeatedly (myfunc))), but the
repeatedly  doesn't seem to ever end.  I have tried having myfunc
return a nil, or a [] but  it just keeps repeating the final end value
of nil or [].

How would you make such a terminating sequence?
Is there a special final value myfunc must return so that the sequence
ends gracefully?
 Or is this just an abuse of the concept of a sequence and I should
just stick to the loop?

thanks
Blake

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

Reply via email to