"减少"功能有什么作用以及如何使用它

Kob*_*son 5 reduce clojure

在这个问题的答案中,响应者使用减少的函数

(defn state [t]
  (reduce (fn [[s1 t1] [s2 t2]] 
            (if (>= t1 t) (**reduced** s1) [s2 (+ t1 t2)]))
          (thomsons-lamp)))
Run Code Online (Sandbox Code Playgroud)

我查看了文档和源代码,无法完全理解它.

(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))
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我认为(reduced s1)应该结束减少并返回s1.

使用reduce +减少等价于假设的reduce-while或reduce-until函数是否存在?

Gre*_*00k 5

减少提供了一种通过提供的价值来突破减少的方法.

例如,在序列中添加数字

(reduce (fn [acc x] (+ acc x)) (range 10))
Run Code Online (Sandbox Code Playgroud)

返回45

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

返回"我已经看够了"