I was sure it was a job for iterate: (defn reductions "Returns a lazy seq of the intermediate values of the reduction (as per reduce) of coll by f, starting with init." ([f coll] (if (seq coll) (for [s (iterate (fn [[x & s]] (if s (lazy-cons (f x (first s)) (rest s)))) coll) :while s] (first s)) (list (f)))) ([f val coll] (reductions f (cons val coll))))
It's interesting that the general case is [f coll] and not [f val coll]. Christophe Chouser a écrit : > How about this one? Same results as in my previous post. Still as > lazy as possible. Plus it's so cute! > > (defn reduction > "Returns a lazy seq of the intermediate values of the reduction (as > per reduce) of coll by f, starting with init." > ([f coll] > (if (seq coll) > (lazy-cons (first coll) (map f (reduction f coll) (rest coll))) > (cons (f) nil))) > ([f init coll] > (lazy-cons init (map f (reduction f init coll) coll)))) > > --Chouser > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---