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。
相当于您的 apply
的 reduce
表格是:
(reduce #(max-key val %1 %2) {:a 2 :bb 1})
我使用的是 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。
相当于您的 apply
的 reduce
表格是:
(reduce #(max-key val %1 %2) {:a 2 :bb 1})