Given a reducible collection, and a transformation function xf, returns a reducible collection, where any supplied reducing fn will be transformed by xf. xf is a function of reducing fn to reducing fn.
clojure.core.reducers/reducer
;;Beware of this bug
;;These two suppose to be the same:
(transduce (comp (take 10) (partition-all 3)) conj (range)) ;; => [[0 1 2] [3 4 5] [6 7 8] [9]]
(reduce conj (r/reducer (range) (comp (take 10) (partition-all 3)))) ;; => [[0 1 2] [3 4 5] [6 7 8]]
;;See https://dev.clojure.org/jira/browse/CLJ-2338
As far as I can see, clojure.core.reducers/reducer (since 1.5) is made obsolete by eduction (since 1.7), which can do the same and more.
eduction