clojure的目的是减少功能

时间:2014-08-03 17:03:05

标签: clojure

clojure reduced函数的用途是什么(在clojure 1.5,https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/reduced中添加)

我找不到任何例子。医生说:

  

以某种方式包装x,使得reduce将以值x终止。

还有一个熟悉它的reduced?

  

如果x是调用reduce

的结果,则返回true

当我试用它时,例如(reduce + (reduced 100)),我得到一个错误而不是100.当我事先知道结果时,为什么还要减少一些东西呢?由于添加了它可能有原因,但Google clojure reduced的Google搜索结果只包含reduce个结果。

1 个答案:

答案 0 :(得分:17)

reduced允许您缩短缩减:

(reduce (fn [acc x]
          (if (> acc 10)
            (reduced acc)
            (+ acc x)))
        0 
        (range 100))
;= 15

(注意:传入(reduced 0)的边缘情况作为初始值从Clojure 1.6开始不起作用。)

这很有用,因为基于reduce的循环非常优雅非常高效(以至于基于reduce的循环不是很常见的基于loop / recur)的“自然”替换,因此最好使此模式尽可能广泛适用。短路reduce的能力极大地增加了可能的应用范围。

对于reduced?,我发现它主要用于为新数据结构实现reduce逻辑;在常规代码中,我让reduce在适当的时候执行自己的reduced?检查。