On Sun, Aug 8, 2010 at 10:50 PM, Meikel Brandmeyer <m...@kotka.de> wrote:
> Hi,
>
> On Aug 8, 6:19 pm, gary ng <garyng2...@gmail.com> wrote:
>
>> I wrote a similar version in F# which does have the advantage of
>> handling infinite input or a very long partition in the sense that I
>> can still consume the first element immediately and can skip to the
>> second, third group ... In a sense, the result is a lazy list of lazy
>> list and if the consumer doesn't hold on to any of them, the memory
>> usage is constant.
>
> I don't think it is possible to do this. At least not in a functional
> way.
>
> Assume your first item of the resulting sequence is a lazy sequence
> representing the first group. To define the rest of the sequence you
> have to know the end of the first group in the input sequence. However
> this can only be found by traversing the input sequence. So this must
> again be some lazy sequence like a drop-while or so. But no matter how
> it is directly implemented, it must retain the head of the input
> sequence for traversal. So, if I traverse the first group, its items
> cannot be GC'd because of the rest definition of the sequence. But the
> same holds true if I skip to the second group without realising the
> first one: to find the actual second group I have to realise the rest
> of the sequence, which will also realise the items of the first group.
>
> So there is no point in not realising the groups: its done anyway, no
> matter what. You just introduce unnecessary laziness overhead.
>
Yes and No.

I have experiemented it a bit back when I was doing it and in certain
cases, there are some advantages(mostly in memory usage) even though
the front of the list still needs to be realized. Say I want the 'head
of each group'. I think the Haskell implementation has this
characteristic too.

-- 
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