【问题标题】:Transduce: Why this transduce doesn't print anything换能器:为什么这个换能器不打印任何东西
【发布时间】:2015-12-12 10:35:20
【问题描述】:

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

逻辑是:它循环(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到控制台,然后返回@ 987654329@。但实际上,它什么也不打印并返回[]。这怎么理解?

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

【问题讨论】:

    标签: clojure transducer


    【解决方案1】:

    那是因为

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-12
      • 2013-04-06
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2015-08-23
      相关资源
      最近更新 更多