In the definition of dorun:
(defn dorun
  "When lazy sequences are produced via functions that have side
  effects, any effects other than those needed to produce the first
  element in the seq do not occur until the seq is consumed. dorun can
  be used to force any effects. Walks through the successive nexts of
  the seq, does not retain the head and returns nil."
  ([coll]
   (when (and (seq coll) (or (first coll) true))
     (recur (next coll))))
  ([n coll]
   (when (and (seq coll) (pos? n) (or (first coll) true))
     (recur (dec n) (next coll)))))

Why do we evaluate (or (first coll) true) instead of just calling it
after the when?

ie. (when (seq coll)
        (first coll)
        (recur (next coll))

I only bring this up because compiling with assert-if-lazy-seq=true
and running something like:
 (doall (map range (repeat 0) (range 10)))
brings up a lazy seq exception.
--~--~---------~--~----~------------~-------~--~----~
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