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.当我事先知道结果时,为什么我会减少一些东西呢?由于它被添加可能有一个原因,但谷歌搜索clojure reduced仅包含reduce结果.
Mic*_*zyk 19
reduced 允许你短路减少:
(reduce (fn [acc x]
(if (> acc 10)
(reduced acc)
(+ acc x)))
0
(range 100))
;= 15
Run Code Online (Sandbox Code Playgroud)
(注意:(reduced 0)作为初始值传入的边缘情况在Clojure 1.6中不起作用.)
这是有用的,因为reduce基于循环的循环既非常优雅又非常高效(以至于reduce基于loop/ 的"自然"替换基于循环并不常见recur,所以最好使这种模式适用于广泛适用于可能.短路的能力reduce大大增加了可能的应用范围.
至于reduced?,我发现它主要reduce用于实现新数据结构的逻辑; 在常规代码中,我让它在适当的时候reduce执行自己的reduced?检查.