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
-~----------~----~----~----~------~----~------~--~---

Reply via email to