新版本的变更 / Clojure 1.5

;; *** before: ***
;; a chain of map/filter builds a fully realized intermediate
;; sequence at every step before reduce even starts
(reduce + (filter even? (map inc [1 1 1 2])))
;=> 6

;; *** in version 1.5: ***
(require '[clojure.core.reducers :as r])

;; r/map and r/filter do not build seqs - they describe the
;; transformation, and reduce drives it in one pass
(reduce + (r/filter even? (r/map inc [1 1 1 2])))
;=> 6

;; fold splits the work with fork/join for vectors and maps,
;; same shape of code, now parallel
(r/fold + (r/filter even? (r/map inc (vec (range 1 100000)))))