This is a general problem with function (split-with) (and derivatives
such as partition-by ...),

This should certainly deserve a mention in their respective
docstrings, I think. Because the docstring speak about lazyness, but
not the kind of lazyness that can avoid Out of Memory in corner cases.

Rich, if you agree with that, would you me to issue a patch on google group ?

2009/4/23 Christophe Grand <christo...@cgrand.net>:
>
> Laurent PETIT a écrit :
>> Hi Meikel,
>>
>> It seems to me that your version is the only safe one so far, that
>> would succesfully indefinitely return values with this test:
>>
>> (dorun (mystery-function true? :foo (repeat true)))
>>
>> Mine, a new version of mine I'll never bother to publish, and
>> Christophe's all retain head.
>> To explain on Christophe's one for example:
>>
>> It uses (split-with) which, in case pred always match coll elements,
>> will retain the head of coll in etc, while eating more and more
>> elements of coll via running on run :
>> 1:21 user=> (defn mystery-function [pred coll]
>>  (lazy-seq
>>    (when (seq coll)
>>      (let [[run etc] (split-with pred coll)]
>>        (if (seq run)
>>          (concat run (cons :foo (mystery-function pred etc)))
>>          (cons (first coll) (mystery-function pred (rest coll))))))))
>> 1:22 user=> (dorun (mystery-function true? (repeat true)))
>> java.lang.OutOfMemoryError: GC overhead limit exceeded (repl-1:22)
>>
>
> Nice catch!
>
>
> --
> Professional: http://cgrand.net/ (fr)
> On Clojure: http://clj-me.blogspot.com/ (en)
>
>
>
> >
>

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

Reply via email to