map is lazy, but to-array is not. The output you are seeing is the result of to-array needing to realize every element of its collection. every? only applies its predicate to as many elements of its collection as are necessary. See the following: user=> (every? print-arg [true false true]) [true] [false] false user=> (every? print-arg (to-array [true false true])) [true] [false] false
every? works the same with lists and with arrays, but to-array on a lazy sequence forces its full evaluation. On Jan 21, 1:40 pm, Daniel Jomphe <danieljom...@gmail.com> wrote: > (defn print-arg [x] > (let [result# x] > (println (format " [%s] " result#)) > result#)) > > (every? true? (map #(print-arg %) [true false true])) > ; [true] > ; [false] > ;false > > (every? true? (to-array (map #(print-arg %) [true false true]))) > ; [true] > ; [false] > ; [true] > ;false > > I would have expected 'every?' to work the same way with lists as it > works with arrays. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---