Иллюстрированный самоучитель по введению в экспертные системы

Рекомендуемая литература. Упражнения.

;; Правило 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)

Если посчитаете нужным, скопируйте из этой программы вспомогательные функции и структуры определения правил, но используйте знания из другой предметной области, которые были приобретены при выполнении предыдущего упражнения.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.