2

I have the following code, and I have expected it to print 1,2,3,4 on console, and return [true,true,true,true]. But it just return empty and doesn't print anything on console.

The logic is: it loop for (0..3), inc every element by 1, so I got (1..4), then run (map (fn[x] (println x) true)) it takes 1 from the lazy sequence, print 1, and return true, and take-while will output the result to [true], then take the next element of 2, print 2, return [true,true], etc. so the result should print 1,2,3,4 to console, and return [true,true,true,true]. But actually, it prints nothing and return []. How to understand this?

(transduce (comp (take-while true?)
                 (map (fn[x] (println x) true))
           conj
           []
           (map inc (range 4)))
Rodrigo Taboada
  • 2,727
  • 4
  • 24
  • 27
Daniel Wu
  • 5,853
  • 12
  • 42
  • 93

1 Answers1

4

Thats because

Composition of the transformer runs right-to-left but builds a transformation stack that is applied left-to-right (filtering happens before mapping in this example).

Look here for more :http://clojure.org/transducers

user5187212
  • 426
  • 2
  • 7