Не работает defmacro и cond - Lisp
Формулировка задачи:
Здравствуйте. Помогите пожалуйста исправить программу.
Нужно написать программу используя макрос. В макрос нужно передавать список из ((условие1 выражание1) ( условие2 выражение2) ... (условиеN выражениеN)) и он должен исполнить первое выражение условие которого возвращает T
Вот что я написал, но не рабоатет
Если первое условие верное то работает, если первое NIL то неверно.
Возвращает 2 что и нужно а вот кодга всторое условие cond страбативает то пишет что
Аргумент CAR - атом (CDR)
PS. Использую homeLisp
(defmacro macros (x) (cond ((car (car x)) (car (cdr (car x)))) (T (macros (cdr x))) ) ) (macroexpand macros (((> 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3))))
(macros (((> 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3))))
Решение задачи: «Не работает defmacro и cond»
textual
Листинг программы
(defmacro macros (x) `(cond ,@x)) ==> MACROS (macros (((> 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3)))) ==> 2 (macros (((< 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3)))) ==> 6 (macroexpand macros (((< 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3)))) ==> (COND ((< 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3)))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д