Clojure 什么是';减少';函数do和如何使用它

Clojure 什么是';减少';函数do和如何使用它,clojure,reduce,Clojure,Reduce,在回答此问题时,响应者使用函数 我看了一下文件和来源,无法完全理解 (defn reduced "Wraps x in a way such that a reduce will terminate with the value x" {:added "1.5"} [x] (clojure.lang.Reduced. x)) 在上面的例子中,我认为(reduced s1)应该结束reduce并返回s1 使用reduce+reduce是否等同于假设的reduce while或re

在回答此问题时,响应者使用函数

我看了一下文件和来源,无法完全理解

(defn reduced
  "Wraps x in a way such that a reduce will terminate with the value x"
  {:added "1.5"}
  [x]
  (clojure.lang.Reduced. x))
在上面的例子中,我认为
(reduced s1)
应该结束reduce并返回s1


使用reduce+reduce是否等同于假设的reduce while或reduce until函数(如果存在)?

reduced提供了一种使用提供的值打破reduce的方法

例如,在序列中添加数字

(reduce (fn [acc x] (+ acc x)) (range 10))
返回45

(reduce (fn [acc x] (if (> acc 20) (reduced "I have seen enough") (+ acc x))) (range 10))

返回“我看得够多了”

源代码
reduced
并没有告诉您很多信息-您必须查看
reduce
的源代码才能真正了解发生了什么。即使是
reduce
的源代码也会调用一些实现方法。
(reduce (fn [acc x] (if (> acc 20) (reduced "I have seen enough") (+ acc x))) (range 10))