Transduce:为什么这种转换器不能打印任何东西

时间:2015-12-12 10:35:20

标签: clojure transducer

我有以下代码,我希望它在控制台上打印1,2,3,4,然后返回[true,true,true,true]。 但它只是返回空,不会在控制台上打印任何内容。

逻辑是:它为(0..3)inc每个元素循环1,所以我得到(1..4),然后运行(map (fn[x] (println x) true))它从懒惰序列中取1, print 1,返回true,take-while将结果输出到[true],然后取下一个2的元素,打印2,返回[true,true]等,这样结果应该打印1 ,2,3,4到控制台,并返回[true,true,true,true]。但实际上,它没有打印任何内容并返回[]。怎么理解这个?

(transduce (comp (take-while true?)
                 (map (fn[x] (println x) true))
           conj
           []
           (map inc (range 4)))

1 个答案:

答案 0 :(得分:4)

那是因为

  

变换器的组成从右到左运行,但构建了一个从左到右应用的转换堆栈(在此示例中,在映射之前进行过滤)。

在此处查看更多信息:http://clojure.org/transducers