直接应用换能器并使用 "transduce" 会产生不同的结果

Applying a transducer directly and with "transduce" yield different results

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

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

必须return相同的值。对吗?

错误

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

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

原来 (transduce) 实现了一个稍微不同的算法。

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

(transduce) 为每个元素调用 (reducer aggregate element),然后出于某种原因再次调用 (reducer aggregate),进行 n+1 调用。因此,(transduce) 无法按预期使用 (-)