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

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

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

Здравствуйте. Помогите пожалуйста исправить программу. Нужно написать программу используя макрос. В макрос нужно передавать список из ((условие1 выражание1) ( условие2 выражение2) ... (условиеN выражениеN)) и он должен исполнить первое выражение условие которого возвращает T Вот что я написал, но не рабоатет
Листинг программы
  1. (defmacro
  2. macros
  3. (x)
  4. (cond
  5. ((car (car x)) (car (cdr (car x))))
  6. (T (macros (cdr x)))
  7. )
  8. )
  9. (macroexpand macros (((> 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3))))
Если первое условие верное то работает, если первое NIL то неверно.
Листинг программы
  1. (macros (((> 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3))))
Возвращает 2 что и нужно а вот кодга всторое условие cond страбативает то пишет что Аргумент CAR - атом (CDR) PS. Использую homeLisp

Решение задачи: «Не работает defmacro и cond»

textual
Листинг программы
  1. (defmacro macros (x)
  2.     `(cond ,@x))
  3.  
  4. ==> MACROS
  5.  
  6. (macros (((> 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3))))
  7.  
  8. ==> 2
  9.  
  10. (macros (((< 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3))))
  11.  
  12. ==> 6
  13.  
  14. (macroexpand macros (((< 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3))))
  15.  
  16. ==> (COND ((< 5 2) (+ 1 1)) (NIL (+ 2 2)) (3 (+ 3 3)))

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут