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

Reply via email to