Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure参考项目是否最新?_Clojure_Lisp - Fatal编程技术网

Clojure参考项目是否最新?

Clojure参考项目是否最新?,clojure,lisp,Clojure,Lisp,从Clojure开始,我发现了Rich Hickey的一篇演讲,他在演讲中展示了Clojure的一些基本优势 这段代码还能被认为是Clojure的一个很好的参考吗?特别是当他递归地向代理发送函数以模拟游戏循环时。 例如: 编辑: 我对#'reader宏不感兴趣,但更感兴趣的是它是否是惯用的/好的克隆 递归调用或不调用代理上的函数。此代码段在Clojure 1.4中是最新的。函数将任务提交回调用它的代理是否惯用?对 下面是一个使用类似方法递归计算阶乘的示例: (defn fac [n limit

从Clojure开始,我发现了Rich Hickey的一篇演讲,他在演讲中展示了Clojure的一些基本优势

这段代码还能被认为是Clojure的一个很好的参考吗?特别是当他递归地向代理发送函数以模拟游戏循环时。 例如:

编辑:

我对
#'
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)