Определить макрос - 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)))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5