(take-while (complement nil?) (repeatedly myfunc))

On Oct 25, 4:07 pm, rugby_road <cabjh...@embarqmail.com> wrote:
> 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 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