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