我正在使用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]
他们看起来不是,有人可以解释原因吗?感谢
答案 0 :(得分:3)
apply
在max-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])