Ошибка в программе - Lisp (229888)

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

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

Здравствуйте. Я недавно начал изучать Lisp, пробую писать простые программы в Corman Common Lisp. Я попытался реализовать программу приведения глагольных форм английского языка к инфинитиву
(setq плохие-глаголы
   '(
         ("be" ("was" "were") "been"  "быть")
("become" "became" "become" "стать")
("begin" "began" "begun" "начать")
("blow" "blew" "blown" "дуть")
("break" "broke" "broken" "ломать")
("bring" "brought" "brought" "приносить")
("build" "built" "built" "строить")
("buy" "bought" "bought" "покупать")
("catch" "caught" "caught" "ловить")
("choose" "chose" "chosen" "выбирать")
("come" "came" "come" "приходить")
("cost" "cost" "cost" "стоить")
("cut" "cut" "cut" "резать")
("do"   "did" "done" "делать")
("draw" "drew" "drawn" "рисовать")
("drink"  "drank" "drunk" "пить")
("drive" "drove" "driven" "водить")
("eat" "ate" "eaten" "есть")
("fall" "fell" "fallen" "падать")
("feel" "felt" "felt" "чувствовать")
("fight" "fought" "fought" "бороться")
("find" "found" "found" "находить")
("fly" "flew" "flown" "летать")
("forget" "forgot" "forgotten" "забывать")
("forgive" "forgave" "forgiven" "прощать")
("get" "got" "got" "получать")
("give" "gave" "given" "давать")
("go" "went" "gone" "идти")
("grow" "grew" "grown" "расти")
("have" "had" "had" "иметь")
("hear" "heard" "heard" "слышать")
("hide" "hid" "hidden" "прятать")
("hold" "held" "held" "держать")
("keep" "kept" "kept" "хранить")
("know" "knew" "known" "знать")
("leave" "left" "left" "оставлять")
("lend" "lent" "lent" "одалживать")
("let" "let" "let" "разрешать")
("lose" "lost" "lost" "терять")
("make" "made" "made" "делать")
("mean" "meant" "meant" "означать")
("meet" "met" "met" "встречать")
("pay" "paid" "paid" "платить")
("put" "put" "put" "класть")
("read" "read" "read" "читать")
("ring" "rang" "rung" "звонить")
("rise" "rose" "risen" "подниматься")
("run" "ran" "run" "бежать")
("say" "said" "said" "говорить")
("see" "saw" "seen" "видеть")
("sell" "sold" "sold" "продавать")
         ("send" "sent" "sent" "посылать")
("shake" "shook" "shaken" "трясти")
("shine" "shone" "shone" "сиять")
("show" "showed" "shown" "показывать")
("shut" "shut" "shut" "закрывать")
("sing" "sang" "sung" "петь")
("sit" "sat" "sat" "сидеть")
("sleep" "slept" "slept" "спать")
("speak" "spoke" "spoken" "говорить")
("spend" "spent" "spent" "тратить")
("stand" "stood" "stood" "стоять")
("stick" "stuck" "stuck" "клеить")
("swim" "swam" "swum" "плавать")
("take" "took" "taken" "брать")
("teach" "taught" "taught" "учить")
("tell" "told" "told" "рассказывать")
("think" "thought" "thought" "думать")
("wake" "woke" "woken" "будить")
("wear" "wore" "worn" "носить")
("win" "won" "won" "побеждать")
("write" "wrote" "written" "писать")
   )
)
 
;;
;; Функции просмотра содержимого списка плохих глаголов
;; и выделения инфинитивной формы
;;
 
(defun просмотр-плохих (глагол список)
; формируем временную переменную
(setq формы (car список))
; (prin1 глагол)(princ " - ")(prin1 формы)(terpri)
(cond 
  ((equal глагол (car формы)) глагол)        ; это 1 форма
  ((equal глагол (caddr формы)) (car формы)) ; это 3-я форма
  ((equal глагол (cadr формы)) (car формы))  ; это 2-я форма 
  ; особый случай - раздвоенная форма was-were
  ((listp (cadr формы))    
    (cond
     ((equal глагол (car (cadr формы))) (car формы))
     ((equal глагол (cadr (cadr формы))) (car формы))
     ((> (length список) 0 ) (просмотр-плохих глагол (cdr список)))
     )
    ) 
  ; список просмотрен, глагол не найден
  ;рекурсивный просмотр всего списка
  ((> (length список) 0 ) (просмотр-плохих глагол (cdr список)))
  (t break)
)
)

(defun плохой? (глагол)
 
 (просмотр-плохих глагол плохие-глаголы)
)
 
;;
;; в случае правильного глагола отрезаем ему суффикс ed
;;
 
(defun отрезать-суффикс (строка)
     ; простейшее решение 
   (string-right-trim "ed" строка)  
)
 
;;
;; выделение инфинитива, если глагольная форма не найдена,
;; возвращает исходный глагол с "отрезанным" суффиксом ed
;;
(defun инфинитив (глагол)
  (if (setq результат (плохой? глагол)) 
      результат
      (отрезать-суффикс глагол)
  )
)
Это программа из учебника, в ней не должно быть ошибок, однако появляется такое сообщение: ";;; An error of type TYPE-ERROR was detected in function SIGNAL-TYPE-ERROR: ;;; Error: Type error: datum = (SETQ (?)), expected type = SYMBOL ;;; Entering Corman Lisp debug loop. ;;; Use :C followed by an option to exit. Type :HELP for help. ;;; Restart options: ;;; 1 Abort to top level. " Скажите, пожалуйста, чем вызвана ошибка? Как её можно исправить? С уважением,

Решение задачи: «Ошибка в программе»

textual
Листинг программы
x -> первая-форма?(verb, x)
           или вторая-форма?(verb, x)
           или третья-форма?(verb, x)

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


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

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

12   голосов , оценка 3.833 из 5