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)