max
で置き換えると機能することに注意してください+
。
(r/fold + (r/map inc (range 10)))
; => 55
違いは、とは異なり+
、引数のない呼び出しの場合max
がないという事実です。引数なしで呼び出されたときにID値を提供するためr/fold
に、結合関数が必要です。それのmax
ために、それのために。*
1
+
0
max'
考えられる解決策は、として機能するを定義することですmax
が、引数なしで呼び出されると、負の無限大を返します— <ahref ="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)))
詳細については、「レデューサー-コレクション処理用のライブラリとモデル」のセクション「シンプルさは機会」を参照してください。