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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---