(defmacro do-range ((index &optional min max step return-value) &body body) (assert (or min max) (min max) "Must specify at least MIN or MAX") `(loop for ,index ,@(when min `(from ,min)) ,@(when max `(upto ,max)) ,@(when step `(by ,step)) do (progn ,@body) finally (return ,return-value)))Source Context