Что делает этот макрос? - Lisp
Формулировка задачи:
Определить, что делает следующий макрос. В случае возникновения
ошибки объяснить причину ее появления.
>(defmacro бот (&whole форма &rest args) форма)
Решение задачи: «Что делает этот макрос?»
textual
Листинг программы
(defun add (a b) (+ a b)) (define-compiler-macro add (&whole whole a b) (if (every #'constantp (list a b)) (+ a b) whole)) (swank:swank-compiler-macroexpand "(add 1 2)") ;; "3" (swank:swank-compiler-macroexpand "(add a b)") ;; "(ADD A B)"
Объяснение кода листинга программы
В данном коде определен макрос ADD, который складывает два числа.
(defun add (a b) (+ a b))
- определение функции ADD для сложения двух чисел.(define-compiler-macro add (&whole whole a b) (if (every #'constantp (list a b)) (+ a b) whole))
- определение макроса ADD для сложения двух чисел с помощьюevery #'constantp (list a b)
. Если оба аргумента являются константами, то возвращается их сумма, иначе возвращается исходный код.(swank:swank-compiler-macroexpand
(add 1 2))
- выполнение макроса ADD с аргументами 1 и 2, результат(+ 1 2)
или3
.(swank:swank-compiler-macroexpand
(add a b))
- выполнение макроса ADD с аргументамиa
иb
, результат(ADD A B)
- исходный код макроса ADD.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д