2

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

逻辑是:它循环for (0..3)inc每个元素加1,所以我得到了(1..4),然后运行(map (fn[x] (println x) true))它从惰性序列中取1,打印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)))
4

1 回答 1

4

那是因为

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

在这里查看更多信息:http ://clojure.org/transducers

于 2015-12-12T11:07:52.307 回答