On Jan 22, 11:17 am, Konrad Hinsen <konrad.hin...@laposte.net> wrote:
> On 22.01.2009, at 16:27, Rich Hickey wrote:
>
> >> Now it works - fine. But what happened to the seq that now owns the
> >> stream? Nothing refers to it, so it should be gone.
>
> > No, the stream must refer to it, in order to keep its promise to
> > return the same seq every time.
>
> OK.
>
> >> Did it perhaps
> >> liberate the stream, so that I can create an iter again? Let's try:
>
> >> (def rand-iter (stream-iter rand-stream))
> >> (next! rand-iter nil)
> >> (next! rand-iter nil)
> > What you've created an iter on the second time is the seq of the
> > stream. Right now, once you've treated a stream as a seq it will
> > always behave like one. So this second stream-iter call actually
> > creates an iter on a stream on that seq.
>
> Does that mean that calling seq on a stream converts the stream into
> a seq for all practical purposes? That sounds a bit dangerous
> considering that so many operations in Clojure call seq implicitly.
> One can easily have a seq "steal" a stream and not notice it before
> all memory is used up by the seq.
>
> > I understand this may not be intuitive or clear yet from the docs. Nor
> > am I set in this being the behavior. The case I am looking towards is
> > this one:
>
> > (def s (stream (range 10)))
> > (if (seq s)
> > (take 4 (map-stream inc s))
>
> > A stream is used as a seq and then passed to a stream function.
> > Without this seqed-stream-behaves-as-seq capability, this will fail
> > with Already iterating, and would have to be written:
>
> > (if (seq s)
> > (take 4 (map-stream inc (seq s))))
>
> I think the second is in fact clearer.
I've made (stream astream) identity in SVN 1228 - that's easy to
understand, and I'm not sure my case will be all that common.
Rich
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---