0

据我了解,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])

必须返回相同的值。对?

错误的

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

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

4

1 回答 1

2

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

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

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

于 2016-08-07T00:48:15.163 回答