(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