Clojure参考项目是否最新?
从Clojure开始,我发现了Rich Hickey的一篇演讲,他在演讲中展示了Clojure的一些基本优势 这段代码还能被认为是Clojure的一个很好的参考吗?特别是当他递归地向代理发送函数以模拟游戏循环时。 例如: 编辑: 我对Clojure参考项目是否最新?,clojure,lisp,Clojure,Lisp,从Clojure开始,我发现了Rich Hickey的一篇演讲,他在演讲中展示了Clojure的一些基本优势 这段代码还能被认为是Clojure的一个很好的参考吗?特别是当他递归地向代理发送函数以模拟游戏循环时。 例如: 编辑: 我对#'reader宏不感兴趣,但更感兴趣的是它是否是惯用的/好的克隆 递归调用或不调用代理上的函数。此代码段在Clojure 1.4中是最新的。函数将任务提交回调用它的代理是否惯用?对 下面是一个使用类似方法递归计算阶乘的示例: (defn fac [n limit
#'
reader宏不感兴趣,但更感兴趣的是它是否是惯用的/好的克隆
递归调用或不调用代理上的函数。此代码段在Clojure 1.4中是最新的。函数将任务提交回调用它的代理是否惯用?对 下面是一个使用类似方法递归计算阶乘的示例:
(defn fac [n limit total]
(if (< n limit)
(let [next-n (inc n)]
(send-off *agent* fac limit (* total next-n))
next-n)
total))
(def a (agent 1))
(await (send-off a fac 5 1))
; => nil
@a
;=> 120
并观察到以下行为:
user=> (for [x (range 10)] (factorial-using-agent-recursive 5))
(2 4 3 120 2 120 120 120 120 2)
user=> (for [x (range 10)] (factorial-using-agent-recursive 5))
(2 2 2 3 2 2 3 2 120 2)
user=> (for [x (range 10)] (factorial-using-agent-recursive 5))
(120 120 120 120 120 120 120 120 120 120)
这个故事的寓意是:不要使用代理进行同步计算。将它们用于异步独立任务—例如更新显示给用户的动画:)您可以发布哪些特定代码来说明问题,以便我们可以帮助您?否则,我认为这个问题应该由程序员来解决。为什么在递归地将
动画
发送到*代理*
时需要#
读取器宏?每次使用动画
时,都会对其进行评估。这样可以动态更改动画
(defn factorial-using-agent-recursive [x]
(let [a (agent 1)]
(letfn [(calc [n limit total]
(if (< n limit)
(let [next-n (inc n)]
(send-off *agent* calc limit (* total next-n))
next-n)
total))]
(await (send-off a calc x 1)))
@a))
user=> (for [x (range 10)] (factorial-using-agent-recursive 5))
(2 4 3 120 2 120 120 120 120 2)
user=> (for [x (range 10)] (factorial-using-agent-recursive 5))
(2 2 2 3 2 2 3 2 120 2)
user=> (for [x (range 10)] (factorial-using-agent-recursive 5))
(120 120 120 120 120 120 120 120 120 120)