Рекомендуемая литература. Упражнения.
;;######################## ;; ;; Порождающие правила ;; Правило 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)) )