What is the difference between the functions doall, dorun, doseq, and for ?
I found some information scattered throug
You can see how dorun and doall relate to one another by looking at the (simplified) source code:
(defn dorun [coll]
(when (seq coll) (recur (next coll))))
(defn doall [coll] (dorun coll) coll)
dorun runs through the sequence, forgetting it as it goes,
ultimately returning nil.doall returns its sequence argument, now realised by the dorun.Similarly, we could implement doseq in terms of dorun and for:
(defmacro doseq [seq-exprs & body]
`(dorun (for ~seq-exprs ~@body)))
For some reason, performance perhaps, this is not done. The standard doseq is written out in full, imitating for.