Следующая функция реализует функциональность сопоставления с использованием каналов, аналогично поведению обычной clojure map.
Я взял этот пример кода из книги Пола Батчера Семь моделей параллелизма за семь недель. Кажется, что этот код уже устарел, потому что при его выполнении выдается следующее сообщение об ошибке. Кто-нибудь знает, как исправить функцию?
Сообщение об ошибке:
Может повторяться только из хвостовой позиции {:exprs nil, :form (recur)
Код:
(defn map-chan [f from]
(let [to (chan)]
(go-loop []
(when-let [x (<! from)]
(>! to (f x))
(recur))
(close! to))
to))
Моя первая попытка исправить: // та же ошибка, что и у источника
(defn map-chan [f from]
(go-loop []
(do
(let [to (chan)]
(when-let [x (<! from)]
(>! to (f x))
(recur))))
(close! to)
)
)