Определить макрос - Lisp
Формулировка задачи:
Определить макрос, который возвращает свой вызов.
Решение задачи: «Определить макрос»
textual
Листинг программы
(defmacro self (&rest arg) `(quote (self ,@arg))) ==> self (self 1 2 3) ==> (self 1 2 3) (self (+ a (/ 6 (+ b 5)))) ==> (self (+ a (/ 6 (+ b 5))))
Объяснение кода листинга программы
В данном коде определен макрос с именем self. Данный макрос принимает произвольное количество аргументов, которые перебираются с помощью &rest arg. Внутри макроса используется функция quote, которая возвращает свою строку аргумента без изменений. Затем с помощью self применяется к каждому аргументу в цикле.
При вызове макроса self с аргументами 1, 2, 3, результат будет следующим: (self 1 2 3).
При вызове макроса self с аргументом (+ a (/ 6 (+ b 5))) результат будет следующим: (self (+ a (/ 6 (+ b 5)))