减少/应用不匹配

时间:2017-08-12 18:40:58

标签: clojure apply reduce

我正在使用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]

他们看起来不是,有人可以解释原因吗?感谢

2 个答案:

答案 0 :(得分:3)

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

与您的reduce等效的apply表单将是:

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

答案 1 :(得分: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])