Определить, что делает следующий макрос - Lisp
Формулировка задачи:
Определить, что делает следующий макрос. В случае возникновения ошибки объяснить причину ее появления.
(delmacro аргумент (форма) (list '(lambda (x) x) (саr форма)))
Решение задачи: «Определить, что делает следующий макрос»
textual
Листинг программы
(defmacro аргумент (форма) (list '(lambda (x) x) (car форма))) ==> аргумент (аргумент (+ 3 4 5)) Assoc: Символ + не имеет значения (не связан). ==> ERRSTATE (аргумент ((+ 3 4) (- 3 4))) ==> 7
Объяснение кода листинга программы
- Создается макрос с именем
аргумент
. - Форма макроса принимает один аргумент.
- Внутри макроса используется функция
lambda
для создания анонимной функции. - Анонимная функция принимает один аргумент
x
. - Внутри анонимной функции используется оператор
x
для передачи значения аргументаx
. - Возвращаемым значением макроса является результат вызова функции
car
с аргументомформа
. - При вызове макроса
аргумент
с аргументом(+ 3 4 5)
создается анонимная функция с одним аргументом. - Анонимная функция вызывается с аргументом
(+ 3 4 5)
. - Возвращаемым значением является результат вызова функции
car
с аргументом(+ 3 4 5)
. - Результат вызова макроса
аргумент
с аргументом(+ 3 4 5)
равен результату вызова функцииcar
с аргументом(+ 3 4 5)
. - При вызове макроса
аргумент
с аргументом((+ 3 4) (- 3 4))
создается анонимная функция с одним аргументом. - Анонимная функция вызывается с аргументом
((+ 3 4) (- 3 4))
. - Возвращаемым значением является результат вызова функции
car
с аргументом((+ 3 4) (- 3 4))
. - Результат вызова макроса
аргумент
с аргументом((+ 3 4) (- 3 4))
равен результату вызова функцииcar
с аргументом((+ 3 4) (- 3 4))
. - При вызове макроса
аргумент
с аргументом((+ 3 4) (- 3 4))
создается анонимная функция с одним аргументом. - Анонимная функция вызывается с аргументом
((+ 3 4) (- 3 4))
. - Возвращаемым значением является результат вызова функции
car
с аргументом((+ 3 4) (- 3 4))
. - Результат вызова макроса
аргумент
с аргументом((+ 3 4) (- 3 4))
равен результату вызова функцииcar
с аргументом((+ 3 4) (- 3 4))
. - При вызове макроса
аргумент
с аргументом((+ 3 4) (- 3 4))
создается анонимная функция с одним аргументом. - Анонимная функция вызывается с аргументом
((+ 3 4) (- 3 4))
. - Возвращаемым значением является результат вызова функции
car
с аргументом((+ 3 4) (- 3 4))
. - Результат вызова макроса
аргумент
с аргументом((+ 3 4) (- 3 4))
равен результату вызова функцииcar
с аргументом((+ 3 4) (- 3 4))
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д