Проблема в том, что ваш звонок на map
ленив и не будет выполняться, пока что-то не попросит результатов.Ничто не делает это в вашем коде.
Существует 2 решения:
(1) Используйте функцию нетерпеливости mapv
:
(mapv #(>!! in %1) items)
(2) Используйте doseq
, которая предназначена дляпобочные операции (например, помещение значений в канал):
(doseq [item items]
(>!! in item))
Оба будут работать и производить вывод:
(process (partial + 1) [1 2 3 4] 1) => (5 4 3 2)
PS У вас есть оператор отладки в (defn consumer ...)
(print f)
, который производит много шума на выходе:
<#clojure.core$partial$fn__5561 #object[clojure.core$partial$fn__5561 0x31cced7
"clojure.core$partial$fn__5561@31cced7"]>
То есть повторяется 5 раз вплотную.Вы, вероятно, хотите этого избежать, так как функция печати «refs» довольно бесполезна для читателя.
Кроме того, для отладочных распечаток обычно следует использовать println
, чтобы вы могли видеть, где начинается и заканчивается каждый из них.