Не работает 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)))