The question is in the title. Below I copy the transducer-part of the source of map
:
([f]
(fn [rf]
(fn
([] (rf))
([result] (rf result))
([result input]
(rf result (f input)))
([result input & inputs] ;why?
(rf result (apply f input inputs))))))
Here is a link to the source of clojure.core
which contains the definition of map
.
map
can work on multiple collections at once, calling the mapping function with an argument for each collection item:
(map + [1 2 3] [4 5 6])
=> (5 7 9)
The +
function is invoked once for each pair of values in those collections e.g. (+ 1 4)
, (+ 2 5)
, (+ 3 6)
. The non-transducer version looks like this.
The map
transducer works the same way:
(sequence (map +) [1 2 3] [4 5 6])
=> (5 7 9)
[
map
] Returns a lazy sequence consisting of the result of applying f to the set of first items of each coll, followed by applying f to the set of second items in each coll, until any one of the colls is exhausted. Any remaining items in other colls are ignored. Function f should accept number-of-colls arguments. Returns a transducer when no collection is provided.