据我了解,换能器是在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
。
答案 0 :(得分:2)
事实证明(transduce)
实现了稍微不同的算法。
(reduce)
为集合中的每个元素调用(reducer aggregate element)
。总共n
次要求收集n
元素。
(transduce)
为每个元素调用(reducer aggregate element)
,然后由于某种原因再次调用(reducer aggregate)
,进行n+1
次调用。因此,(transduce)
(-)
无法正常工作。