doseq is almost interchangable with for, so why have both doseq and for? The for loop will always return a value and doseq will never return a value.
user=> (for [x (range 10) :when (even? x)] x) (0 2 4 6 8) user=> (doseq [x (range 10) :when (even? x)] x) nil user=>