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

标签 clojure functional-programming

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

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

例如:验证字典列表是否有错误;每个字典都有一个名为 count 的键。现在列表中这些计数字段的总和不应超过某个值。如何找到列表中总和超过限制的第一项?

理想情况下,我会使用reduce并维护运行总计;一旦总数超过限制,我想停在那里(我不知道该怎么做)。

此外,reduce 的返回值每次都是到目前为止的总和,但我需要在最后返回索引。

最佳答案

您可以使用reduced终止缩减的函数:

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

关于clojure - 一旦达到所需的累积量,如何停止reduce函数处理列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23822260/

相关文章:

clojure - 调用 "use"的几种方法?

functional-programming - 函数式更新

scala - 你能在 scala 中使用 varargs 柯里化(Currying)一个函数吗?

clojure - 有没有办法强制 Clojure 将父命名空间路径映射到某个目录?

clojure - 在 Clojure 服务器中嵌入 NREPL 的最佳实践方法

functional-programming - Java 8 函数式编程——传递函数及其参数

java - 术语 : What do you call a function that does not change object state?

c++ - 是否有 std::function 的独立实现?

clojure - 如何打包并启动您的 Clojure 应用程序?

function - 为什么有些?在 Clojure 中将 false 作为参数时返回 true?