(defmacro multiple-value-setf (places form) (loop for place in places for name = (gensym) collect name into bindings if (eql 'nil place) collect `(declare (ignore ,name)) into ignores else collect `(setf ,place ,name) into body finally (return `(multiple-value-bind ,bindings ,form ,@ignores ,@body))))Source Context