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

Полный листинг программы

;;ПЕРЕХОД К АНАЛИЗУ СЛЕДУЮЩЕГО "МИРА" И
;;ВЫВОД ОТЧЕТА О РЕЗУЛЬТАТАХ
;;Переход к анализу следующего "мира",
;;ЕСЛИ никакие другие правила не ожидают активизации,
;;ТО анализ текущего "мира" завершен и
;;можно приступить к формированию нового "мира",
;;если имеются необработанные высказывания.
;;ПРИМЕЧАНИЕ. Это правило имеет приоритет,
;;более низкий, чем все прочие правила,
;;исключая правило вывода результатов,
(defrule move
(declare (salience -50))
;;Существует "мир", сформированный на основе
;;исходного высказывания.
?W ← (world (tag?N&:(>?N 0)) (task check))
;;В базе фактов отсутствуют объекты world,
;;созданные позже текущего.
(not (world (tag?T&:(>?T?N))))
В базе фактов имеется высказывание, подготовленное к созданию нового объекта world.
(statement (reason 0) (done 0)) ›
;; Сформировать новый объект world на основе
;; этого объекта statement.
(assert (world (tag (+?N 1))))
)
;;ЕСЛИ отсутствуют противоречия в объектах world,
;;ТО распечатать результаты.
;;ПРИМЕЧАНИЕ. Это правило будет активизироваться
;;повторно до тех пор, пока не будет выведена
;;непротиворечивая интерпретация,
(defrule report-results
(declare (salience -40)) (not (world (task contra)))
(not (statement (reason 0) (done 0)))
(statement (tag?N) (done?MS~0))
(claim (content?P?X) (reason?N)) ›
(printout t crlf
"RESULT: "?P?X " from statement "?N
;; "РЕЗУЛЬТАТ: "?P?X " из высказывания "?N
t crlf)
;; ЕСЛИ противоречие остается и после анализа всех точек отката
;; и нет больше правил, которые можно было бы активизировать,
;; ТО прекратить процесс вычислений,
(defrule sanity-check
(declare (salience -100))
(world (tag?N) (task?T&:(or (eg?T contra)
(eq?T back))))
(not (world (tag?M&:(<?M?N))
(scope truth) (task check))) ›
(printout t crlf
"FAIL: Statements inconsistent, detected in world "?N
;; "РЕШЕНИЕ НЕ НАЙДЕНО: Высказывания противоречивы,
;; обнаружены в мире "?N
t crlf) (halt)
)

Я не сомневаюсь в том, что эту программу можно совершенствовать и далее. Можно, например, попытаться использовать технологию отката, основанную на комбинировании направленных и хронологических методов поиска точки возврата. Но и в том виде, в каком она здесь представлена, программа справляется со всеми сформулированными в тексте приложения задачами. Анализируя текст программы, вы можете убедиться в том, что язык CLIPS позволяет реализовать многие из описанных в данной книге технологий, в частности:

  • методику прямого логического вывода, которая обеспечивает разрешение конфликтов (глава 5);
  • целенаправленный логический вывод с использованием лексем задач (главы 5 и 14);
  • анализ множества контекстов при разных исходных предположениях (главы 17 и 19).

На примере этой программы вы также могли убедиться в том, что несмотря на модульную структуру, расширение ее функциональных возможностей сопряжено с определенной модификацией ранее разработанных модулей (правил), которые должны учитывать изменения, вносимые в структуру данных.

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