1. ホーム
  2. clojure

[解決済み] Clojure: リデュース vs. アプライ

2022-07-04 01:14:49

質問

の概念的な違いについては理解しています。 reduceapply :

(reduce + (list 1 2 3 4 5))
; translates to: (+ (+ (+ (+ 1 2) 3) 4) 5)

(apply + (list 1 2 3 4 5))
; translates to: (+ 1 2 3 4 5)

しかし、どちらがよりイディオム的なclojureなのでしょうか? どちらか一方に大きな違いがあるのでしょうか? 私の(限られた)パフォーマンス・テストでは、どうやら reduce は少し速いようです。

どのように解決するのですか?

reduce そして apply はもちろん、変数アリティの場合にすべての引数を見る必要がある連想関数についてだけ(返される最終結果という点で)等価です。結果的に等価である場合、私は、以下のように言うでしょう。 apply は常に完璧な慣用句であり、一方 reduce は同等であり、多くの一般的なケースで瞬きの数分の一を削ることができるかもしれません。以下は、このように考える私の根拠です。

+ はそれ自体が reduce