一旦达到所需的累积,如何停止处理列表的reduce函数?

Amo*_*kar 6 functional-programming clojure

在程序世界中,如果我必须找到满足测试的列表的第一项,我只会使用breakreturn.

在Clojure中,当我使用reduce查找第一个值来处理列表时,如果我继续并处理整个列表,它会不会效率低下?

例如:验证字典列表是否存在错误; 每个字典都有一个叫做的密钥count.现在,列表中这些计数字段的总和不应超过某个值.如何在列表中找到总和超出限制的第一项?

理想情况下,我会使用reduce并维持一个总计; 一旦总数超过限制,我想停在那里(我无法弄清楚该怎么做).

此外,reduce的返回值将是每次到现在的总和,但我需要在所有结束时返回索引.

Jon*_*nas 16

您可以使用该reduced函数终止减少:

(reduce (fn [sum x] 
          (if (> sum 10) 
            (reduced 10) 
            (+ sum x))) 
        0 
        [1 2 3 4 5 6 7 8 9 10])
Run Code Online (Sandbox Code Playgroud)