Простой пример макроса
Предположим, мы хотим определить конструкцию Lisp для инкремента значения переменной, аналогично оператору ++ в C. Мы хотим написать (inc x) и получить эффект (setq x (1+ x)). Вот определение макроса, которое выполняет эту задачу:
(defmacro inc (var) (list 'setq var (list '1+ var)))
При вызове с (inc x), аргумент var — это символ x — не значение x, как это было бы в функции. Тело макроса использует это для построения развёртывания, которое равно (setq x (1+ x)). После того, как макрос возвращает это развёртывание, Lisp продолжает его оценивать, тем самым увеличивая x.
- Функция: macrop объект
Этот предикат проверяет, является ли его аргумент макросом, и возвращает
tв случае успеха,nilв противном случае.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Simple-Macro.html