Не работает defmacro и cond - Lisp

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Помогите пожалуйста исправить программу. Нужно написать программу используя макрос. В макрос нужно передавать список из ((условие1 выражание1) ( условие2 выражение2) ... (условиеN выражениеN)) и он должен исполнить первое выражение условие которого возвращает T Вот что я написал, но не рабоатет
(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))))
Если первое условие верное то работает, если первое NIL то неверно.
(macros (((> 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3))))
Возвращает 2 что и нужно а вот кодга всторое условие cond страбативает то пишет что Аргумент CAR - атом (CDR) PS. Использую homeLisp

Решение задачи: «Не работает 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)))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5