直接应用换能器并使用“转换”会产生不同的结果

时间:2016-08-06 23:42:48

标签: clojure transducer

据我了解,换能器是在reduce发生之前转换缩减器功能的函数。换句话说,(transduce transducer reducer collection)相当于(reduce (transducer reducer) collection)。所以这两个表达式

(reduce ((map inc) -) 0 [3 4 5])
(transduce (map inc) - 0 [3 4 5])

必须返回相同的值。正确?

错误

(reduce ((map inc) -) 0 [3 4 5])    -15
(transduce (map inc) - 0 [3 4 5])    15

错误或功能?我的Clojure版本是1.8.0

1 个答案:

答案 0 :(得分:2)

事实证明(transduce)实现了稍微不同的算法。

(reduce)为集合中的每个元素调用(reducer aggregate element)。总共n次要求收集n元素。

(transduce)为每个元素调用(reducer aggregate element),然后由于某种原因再次调用(reducer aggregate),进行n+1次调用。因此,(transduce) (-)无法正常工作。