Если первый элемент вычисляемого списка является макрообъектом, то список является вызовом макроса. При вычислении вызова макроса элементы остальной части списка не вычисляются изначально. Вместо этого эти элементы сами используются в качестве аргументов макроса. Определение макроса вычисляет заменяющую форму, называемую расширением макроса, которая будет вычислена вместо исходной формы. Расширение может быть любой формой: самовычисляемой константой, символом или списком. Если расширение само является вызовом макроса, этот процесс расширения повторяется до тех пор, пока не будет получена другая форма.
Обычное вычисление вызова макроса завершается вычислением расширения. Однако расширение макроса не обязательно вычисляется немедленно или вообще, потому что другие программы также расширяют вызовы макросов, и они могут или не могут вычислять расширения.
Обычно выражения аргументов не вычисляются при вычислении расширения макроса, а вместо этого появляются как часть расширения, поэтому они вычисляются, когда вычисляется расширение.
Например, при заданном макросе:
(defmacro cadr (x) (list 'car (list 'cdr x)))
выражение вроде (cadr (assq 'handler list)) является
вызовом макроса, и его расширение:
(car (cdr (assq 'handler list)))
Обратите внимание, что аргумент (assq 'handler list)
появляется в расширении.
См. Макросы для полного описания макросов Emacs Lisp.