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
个结果。
答案 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?
检查。