请注意,当您替换为 时,它会max起作用+。
(r/fold + (r/map inc (range 10)))
; => 55
不同之处在于,like+ max 没有不带参数的调用的情况。r/fold需要组合函数——即max——在不带参数调用时提供一个标识值。因为*它1,因为+它0。
一个潜在的解决方案是定义一个max'作为max但当不带参数调用时它返回负无穷大-<a href="https://en.wikipedia.org/wiki/Identity_element" rel="noreferrer">一个身份函数的元素max。
(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,Simplicity is Opportunity部分。