Spec-Zone.ru › Elisp

Простой пример макроса

Предположим, мы хотим определить конструкцию 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API