Avoid Destroying Arg Lists
(defmacro sum-plus-1 (&rest args)
(cons '+ (nconc args (list 1))))
(defun foo () (sum-plus-1 2 3))
Because the macro is destructively modifying the source code of the caller
The source code stops changing when you compile it