Не работает 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)))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д