Reduce/Apply 不匹配

Reduce/Apply mismatch

我使用的是 Clojure 1.8,并且我希望 reduce 和 apply 对于这个特定示例在输出方面是等效的。

user=> (apply max-key val {:a 2 :bb 1})
[:a 2]
user=> (reduce max-key val {:a 2 :bb 1})
[:bb 1]

他们看起来不像,谁能解释为什么?谢谢

(reduce max-key val {:a 2 :bb 1}) 使用 max-key 作为累加器和 val 作为初始值。它有效地扩展为:

(max-key (max-key val [:a 2]) [:bb 1]))

(max-key val [:a 2])[:a 2](max-key [:a 2] [:bb 1])

apply 将参数添加到 max-key 的调用之前。 reduce - 另一方面 - 减少了 {:a 2 :bb 1},用两个参数调用 max-key。 val 在 reduce 中被视为 the initial value of the accumulator

相当于您的 applyreduce 表格是:

(reduce #(max-key val %1 %2) {:a 2 :bb 1})