Macro: ONCE-ONLY

Source

(defmacro once-only ((&rest names) &body body)
  (let ((gensyms (loop for n in names collect (gensym))))
    `(let (,@(loop for g in gensyms collect `(,g (gensym))))
      `(let (,,@(loop for g in gensyms
		      for n in names
		      collect ``(,,g ,,n)))
	,(let (,@(loop for n in names
		       for g in gensyms collect `(,n ,g)))
	      ,@body)))))
Source Context