2017-08-12 77 views
1

我使用的是Clojure 1.8,我期望減少並適用於這個特定示例的輸出方式。減少/應用不匹配

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

他們看起來像他們不是,任何人都可以解釋爲什麼?謝謝

+2

爲什麼你怎樣exepct他們是一樣的嗎? – Lee

回答

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

(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])