Определить, что делает следующий макрос - 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)).