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