【发布时间】:2016-12-13 08:20:42
【问题描述】:
以下函数使用通道实现映射功能,类似于普通clojure map的行为
我从 Paul Butcher 的七周内的七个并发模型一书中得到了这个代码示例。似乎这段代码已经过时了,因为在执行它时,它会抛出以下错误消息。有谁知道如何修复这个功能?
错误信息:
只能从尾部位置递归 {: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)
)
)
【问题讨论】: