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


Полный листинг программы - часть 11


;;ЕСЛИ все объекты world, созданные

;;после объекта М, удалены,

;;ТО повторно сформировать объект М,

;;предположив лживость высказывания.

(defrule restart

(declare (salience 20))

?W <- (world (tag ?M) (scope truth)

(task back) (context ?C&~1)) =>

(modify ?W (scope falsity) (task check) (context 0))

)

;;ПЕРЕХОД К АНАЛИЗУ СЛЕДУЮЩЕГО "МИРА" И

;;ВЫВОД ОТЧЕТА О РЕЗУЛЬТАТАХ

;;Переход к анализу следующего "мира",

;;ЕСЛИ никакие другие правила не ожидают активизации,

;;ТО анализ текущего "мира" завершен и

;;можно приступить к формированию нового "мира",

;;если имеются необработанные высказывания.

;;ПРИМЕЧАНИЕ. Это правило имеет приоритет,

;;более низкий, чем все прочие правила,

;;исключая правило вывода результатов,

(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)

;; ЕСЛИ противоречие остается и после анализа всех точек отката

;; и нет больше правил, которые можно было бы активизировать,




Начало  Назад  Вперед



Книжный магазин