Clojure 直接使用传感器,并使用;“传感器”;产生不同的结果

Clojure 直接使用传感器,并使用;“传感器”;产生不同的结果,clojure,transducer,Clojure,Transducer,据我所知,传感器是在reduce发生之前转换reducer函数的函数。换句话说,(传感器减速器收集)相当于(传感器减速器收集)。所以这两个表达式 (reduce ((map inc) -) 0 [3 4 5]) (transduce (map inc) - 0 [3 4 5]) 必须返回相同的值。对吧? 错 一个bug还是一个特性?我的Clojure版本是1.8.0 结果是(transduce)实现了一种稍微不同的算法 (reduce)为集合中的每个元素调用(reducer聚合元素)。总共n调

据我所知,传感器是在
reduce
发生之前转换reducer函数的函数。换句话说,
(传感器减速器收集)
相当于
(传感器减速器收集)
。所以这两个表达式

(reduce ((map inc) -) 0 [3 4 5])
(transduce (map inc) - 0 [3 4 5])
必须返回相同的值。对吧?

一个bug还是一个特性?我的Clojure版本是
1.8.0

结果是
(transduce)
实现了一种稍微不同的算法

(reduce)
为集合中的每个元素调用
(reducer聚合元素)
。总共
n
调用
n
元素的集合

(transduce)
调用每个元素的
(reducer aggregate element)
,然后出于某种原因再次调用
(reducer aggregate)
,进行
n+1
调用。因此,
(transduce)
(-

的工作方式不尽相同,结果是
(transduce)
实现了一种稍有不同的算法

(reduce)
为集合中的每个元素调用
(reducer聚合元素)
。总共
n
调用
n
元素的集合


(transduce)
调用每个元素的
(reducer aggregate element)
,然后出于某种原因再次调用
(reducer aggregate)
,进行
n+1
调用。因此,
(transduce)
(-

一起使用时不能像预期的那样工作顺便说一下,这就是
完成
的目的-如果您将
transduce
(完成-
一起使用,而不是
-
,您将通过这种方式获得预期的结果,这就是
完成
的目的-如果将
变速器
(完成-
一起使用,而不是
-
,您将获得预期的结果
(reduce ((map inc) -) 0 [3 4 5])    -15
(transduce (map inc) - 0 [3 4 5])    15