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