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

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

;; ЕСЛИ при анализе левого дизъюнкта обнаружено
;; противоречие,
;; ТО проанализировать правый дизъюнкт.
(defrule right-disjunct
(declare (salience 10))
?W ← (world (tag?N) (task contra) (context 1))
(claim (content OR?P?X?Q?Y) (reason?N)
(scope?V)) ›
(assert (claim (content?Q?Y)
(reason?N) (scope?V) (context 2)))
(modify?W (task check) (context 2))
)
;; ЕСЛИ выполнен откат к анализу правого дизъюнкта,
;; ТО установить соответствующий контекст.
(defrule resume-disjunct
?W ← (world (tag?N) (task back) (context 1))
(claim (content OR?P?X?Q?Y) (reason?N) (scope?V))
 ›
(assert (claim (content?Q?Y) (reason?N)
(scope?V) (context 2))) (modify?W
(task check) (context 2))
)
;; ЕСЛИ анализ обоих дизъюнктов в предположении о
;; правдивости персонажа привел к противоречию
;; в том же самом "мире",
;; ТО выполнить анализ, предполагая, что персонаж лжет.
(defrule false-disjuncts
?W ← (world (tag?M) (scope truth)
(task contra) (prior 0) (context 2))
(not (claim (reason?M) (context 2))) ›
(modify?W (scope falsity) (task check) (context 0))
)
;; ЕСЛИ анализ в предположении о правдивости персонажа
;; привел к противоречию с другим "миром",
;; ТО выполнить анализ, предполагая, что персонаж лжет.
(defrule other-world
?W ← (world (tag?N) (scope truth) (task contra)
(prior?M&"0) (context 0)) ›
(modify?W (scope falsity) (task check))
)
;;ОБРАБОТКА ПРОТИВОРЕЧИЙ
;;ЕСЛИ обнаруживается противоречие между предположением
;;и производными от него фактами в пределах одного и
;;того же мира и в одном и том же контексте,
;;ТО зафиксировать противоречие и удалить
;;противоречивые утверждения (объекты claim)
;;из базы фактов, (defrule contradiction
(declare (salience 100))
?W ← (world (tag?N) (task check) (scope?V)
(context?S))?P < – (claim
(content?F?X) (scope?V) (reason?N)
(context?S))?Q < – (claim
(content?G&:(-not (eq?G?F))?X)
(scope?V) (reason?N) (context?S)) ›
(printout t crlf
"CONTRADICTION: "?F?X " versus "?G?X "in world "?N
;; "ПРОТИВОРЕЧИЕ между: "?F?X " и "?G?X "в мире "?N
t crlf) (retract?P) (retract?Q)
(modify?W (task contra))
;; ЕСЛИ обнаруживается противоречие между предположением
;; и производными от него фактами в пределах одного и
;; того же мира, но в разных контекстах,
;; ТО зафиксировать противоречие.
(defrule transcontext
(declare (salience 90))
?W ← (world (tag?N) (task check) (scope?V)
(context?T))
(claim (content?F?X) (scope?V) (reason?N)
(context?S&:(<?S?T)))
(claim (content?G&:(not (eq?G?F))?x') (scope?V)
(reason?N) (context?T)) ›
(printout t crlf
"TRANSCONTEXT CONTRADICTION: "?F?X " versus "
?G?X " in world "?N
;; "ТРАНСКОНТЕКСТНОЕ ПРОТИВОРЕЧИЕ между: "
?F?X;; " и "?G?X "в мире "?N
t crlf) (modify?W (task contra))
)
;; ЕСЛИ обнаруживается противоречие между
;; текущим "миром" в предположении о правдивости
;; и ранее покинутым "миром",
;; ТО зафиксировать противоречие.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.