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

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

;;########################
;;
;; Порождающие правила
;; Правило START.
;; ЕСЛИ: начинается выполнение программы
;; ТО: определить поврежденный узел и
;; сформировать шаблон описания проблемы,
(defrule start
?start-token < – (initial-fact) ›
(retract?start-token)
(printout t crlf
"What part of the gun are you problem with?"
;; С каким узлом у вас проблемы?
(choose-list)
(part-list)
(prompt)
(bind?part (read))
(assert (problem (part?part))))
;; Правило FINISH:
;; ЕСЛИ: Неисправность устранена
;; TO: Прекратить работу программы.
(defrule finish
(repair (check done) (remark?rem&~" "))
 ›
(printout t crlf?rem crlf)
(printout t crlf "Glad to be of service! " crlf)
;; Рад быть вам полезным!
(halt))
Правило CHECK-REPAIR:
ЕСЛИ: Имеется решение менее радикальное, чем
замена
ТО: Информировать пользователя и отметить,
что неисправность (проблема) может быть устранена путем ремонта,
(defrule check-repair?rep <-
(repair (part?part) (action?actions~replace)
(subpart?sub&~nil&~?part))
(problem (part?part) (symptom?sym))
 ›
(printout t crlf
"If you "?action "the "?sub "that should "
"fix the "?sym "problem with the,"?part crlf)
;; "Если вы "?action?sub "то это' должно "
;; "устранить "?sym "проблемы с "?part crlf)
(modify?rep (check done))
)
Правило CHECK-REPLACE:
ЕСЛИ:
Решение требует замены узла
ТО:
Информировать пользователя и отметить, что неисправность (проблема) устранена.
 Для этого добавить в рабочую память пустой вектор и запросить у пользователя наименование модели
;; изделия,
(defrule check-replace
(repair (part?part) (action replace))
(not (model?mod&~nil))
?prob < – (problem (part?part)
(symptom?sym)) ›
(printout t crlf
"You have to replace the "
?part "to fix the "?sym "problem" crlf)
;; "Вам потребуется заменить"?part
;; "чтобы устранить "?sym "проблемы " crlf)
(assert (model nil)))
;; Правило REPLACE:
;; ЕСЛИ: Пользователю необходимо заменить узел
;; ТО: Запросить у пользователя наименование
;; модели изделия,
(defrule replace
?rep < – (repair (action replace))
?mod < – (model nil) ›
(printout t crlf
"What model of revolver do you have?" crlf)
;; "Какой модели ваш револьвер?"
(kind-list)
(prompt)
(bind?answer(read))
(retract?mod)
(assert (model?answer))
(modify?rep (check part-no))
)
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.