В книге Clojure for the Brave and True в конце раздела, посвященного reduce, есть проблема:
Если вам нужно упражнение, которое действительно сдует волосы назад, попробуйте реализовать
map
с помощьюreduce
.
Оказывается, это было намного сложнее (по крайней мере, для меня, новичка в Clojure), чем я думал. Через несколько часов я придумал это:
(defn map-as-reduce
[f coll]
(reduce #(cons (f %2) %1) '() (reverse coll)))
Это лучший способ сделать это? Меня особенно расстраивает тот факт, что я должен перевернуть входную коллекцию, чтобы это работало правильно. Выглядит как-то неэлегантно!