请注意,当您替换为 时,它会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部分。