Рекомендуемая литература. Упражнения.
;; Правило PART-NO: ;; ЕСЛИ: Пользователю необходимо заменить узел ;; ТО: Выяснить номер узла, отослав сообщение ;; объекту, представляющему данную модель ;; изделия, (defrule part-no (model?mod£Tnil) ?rep < – (repair (part?part) (action replace) (check part-no)) › (bind?no (send (symbol-to-instance-name?mod) part-no?part)) (printout t crlf "The part number of the "?mod " "?part " is "?no crlf);; "Номер узла "?mod " "?part?no (modify?rep (check done))) ;; Правила BARREL (ствол) ;; Правило BARREL-SYMPTOM ;; ЕСЛИ: Неисправность не имеет признаков ;; ТО: Выяснить признак (симптом), (defrule barrel-symptom ?prob < – (problem (part barrel) (symptom nil) (subpart nil)) › (printout t crlf "Is there a problem inside barrel? " crlf) ;; "Есть ли повреждения внутри ствола?" (prompt) (bind?answer(read)) (if (eq?answer yes) then (modify?prob (subpart bore)) )) ;; Правило BARREL-INSIDE ;; ЕСЛИ: Имеется повреждение канала ствола ;; ТО: Выяснить у пользователя, ;; какое (и предложить помощь). (defrule barrel-inside ?prob < – (problem (part barrel) (symptom nil) (subpart bore)) › (printout t crlf "What is the problem inside the barrel? " crlf) ;; "Характер повреждения канала ствола?" (choose-list) (printout t crlf " leading rust jam" crlf) ;; " наличие ржавчины" (prompt) (bind?answer (read)) (modify?prob (symptom?answer))) ;; Правило BARREL-RUST ;; ЕСЛИ: Имеется ржавчина в канапе ствола ;; ТО: Проверить наличие раковин. (defrule barrel-rust ?prob < – (problem (part barrel) (symptom rust) › (printout t crlf "Are there pits inside the barrel? " crlf) ;; "Нет ли раковин в канале ствола?" (prompt) (bind?answer (read)) (if (eq?answer yes) then (assert (repair (action replace) (part barrel) (subpart bore)) (remark "Please consult your local dealer"))) ;; Проконсультируйтесь с местным дилером else (assert (repair (action clean) (part barrel) (subpart bore)) (remark "Gun should be kept clean and dry")) ;; Оружие нужно содержать в чистоте и ;; предохранять от сырости )) ;; Правило BARREL-LEADING ;; ЕСЛИ: Имеется налет свинца в канале ствола ;; ТО: Проверить качество патронов, (defrule barrel-leading ?prob.< – (problem (part barrel) (symptom leading) (check nil)) › (modify?prob (check ammo)) (printout t crlf "You may be using the wrong ammunition " crlf) ;; "Возможно, вы пользуетесь некачественными ;; патронами") ;; Правило BARREL-LEADING-CHECK ;; ЕСЛИ: Имеется налет свинца в канале ствола ;; ТО: Проверить качество патронов, (defrule barrel-leading-check Pprob < – (problem (part barrel) (symptom leading) (check ammo)) › (assert (repair (part barrel) (action clean) (subpart bore) (remark "Use Lewis Lead Remover")) ;; Воспользуйтесь средством для удаления свинца ;; фирмы Lewis)
Если посчитаете нужным, скопируйте из этой программы вспомогательные функции и структуры определения правил, но используйте знания из другой предметной области, которые были приобретены при выполнении предыдущего упражнения.