gpt4 book ai didi

map - Clojure reducer 库 - 最大折叠

转载 作者:行者123 更新时间:2023-12-04 10:53:58 26 4
gpt4 key购买 nike

我正在尝试将以下示例转换为新的 Clojure 1.5 reducers 库:

(reduce max (map inc (range 10))) 
;=> 10

当我更改它时 - 我收到以下错误:
(r/fold max  (r/map inc (range 10)))
;ArityException Wrong number of args (0) passed to: core$max clojure.lang.AFn.throwArity (AFn.java:437)

有人可以给我一个正确的解决方案吗?

最佳答案

请注意,当您替换 max 时它会起作用。与 + .

(r/fold + (r/map inc (range 10)))
; => 55

不同之处在于 unlike + max does not have一个没有参数的调用案例。 r/fold需要组合函数——即 max — 在不带参数的情况下调用时提供标识值。对于 *它是 1 , 为 +它是 0 .

一个潜在的解决方案是定义一个 max'充当 max但是当不带参数调用时,它返回负无穷大— an identity elementmax功能。
(defn max'
([] Double/NEGATIVE_INFINITY)
([& args] (apply max args)))
(r/fold max' (r/map inc (range 10)))
; => 10

使用 r/monoid 可以获得相同的结果功能。
(r/fold (r/monoid max #(Double/NEGATIVE_INFINITY)) (r/map inc (range 10)))

如需进一步讨论,请参阅 Reducers - A Library and Model for Collection Processing ,节简单就是机会。

关于map - Clojure reducer 库 - 最大折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14192211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com