Důležité je nejdřív si uvědomit, že lispová makra získávají lispový kód jako data a mají k dispozici celý CL k tomu, aby ty data (kód) přetvořily na kód, který je následně vyhodnocován. A pak bych odkázal třeba na anaforická makra, kde je na alambdě pěkně vidět jak to funguje (máme anonymní funkci, v které chceme používat rekurzi, ovšem samotná lambda to neumožnuje, tak to vylepšíme ...).
Pro trknutí:
(defmacro print-me ((&whole w &rest r)) (print w) r)
Použití:
(print-me (+ 1 2 3)) (print-me (print "Ahoj"))
V druhém případě je pak vidět, že nedochází k dvojnásobnému vyhodnocování.