My friend's playing with Haskell, and asked me how I'd write a function to take a list and return a list of the sums like so:
(f [1 2 4 8]) => [1 3 7 15] So I told him about Haskell's scanl function. Is scanl available in Haskell? These were my two versions of it and some simple benchmarks: (defn scanl ([f seed coll] (scanl f seed coll 1)) ([f seed coll i] (if (<= i (count coll)) (cons (reduce f seed (take i coll)) (scanl f seed coll (inc i)))))) (println (scanl + 0 [1 4 5 9])) (defn scanl2 [f seed coll] (loop [f f seed seed coll coll acc []] (let [cnt (count acc)] (if (< cnt (count coll)) (recur f seed coll (conj acc (reduce f seed (take (inc cnt) coll)))) acc)))) (println (scanl2 + 0 [1 4 5 9])) (def first (with-out-str (time (scanl + 0 [1 4 5 9 6 7 8 9])))) (def second (with-out-str (time (scanl2 + 0 [1 4 5 9 6 7 8 9])))) (println first) (println second) -- 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 Note that posts from new members are moderated - please be patient with your first post. 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