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

Расширение набора правил – работа с составными высказываниями

Нам потребуется модифицировать и прежний вариант правила centra-truth.

;; Выявление противоречия между предположением о
;; правдивости и следующими из него фактами
;; в одном и том же контексте одного и того же объекта world.
(defrule contra-truth
(declare (salience 10))
?W ← (world (tag?N) (scope truth))
?P ← (claim (content Т?Х) (reason?N)
(context?S)
(scope truth))?Q ← (claim (content F?X)
(reason?N) (context?S)
(scope truth)) ›
(printout t
"Statement is inconsistent if "?X " is a knight"
;; "Высказывание противоречиво, если "? X
;; " правдолюбец. "
crlf)
(retract?Q) (retract?P) (modify?W (scope falsity) (context 0)
;; Выявление противоречия между предположением о
;; лживости и следующими из него фактами
;; в одном и том же контексте одного и того же объекта world.
(defrule contra-falsity (declare (salience 10))
?W ← (world (tag?N) (scope falsity))
?P ← (claim (content F?X) (reason?N)
(context?S) (scope falsity))
?Q ← (claim (content Т?Х) (reason?N)
(context?S)(scope falsity)) ›
(printout t
"Statement is inconsistent whether "?X
" is knight or knave."
;; "Высказывание противоречиво, независимо от того,"
;; "является ли "?Х " правдолюбцем или лжецом."
crlf)
(modify?W (scope contra))

Поскольку теперь постановка задачи усложнилась по сравнению с вырожденным случаем, имеет смысл включить в программу распечатку предположений о характеристиках персонажей, упомянутых в высказываниях.

(defrule consist-truth
(declare (salience – 10))
?W ← (world (tag?N) (scope truth))
(statement (speaker?Y) (tag?N)) ›
(printout t
"Statement is consistent:"
;; "Высказывание непротиворечиво:"
crlf)
(modify?W (scope consist)
)
(defrule consist-falsity
(declare (salience – 10))?W ← (world (tag?N)
(scope falsity)) (statement (speaker?Y) (tag?N)) ›
(printout t
"Statement is consistent:"
;; "Высказывание непротиворечиво:"
crlf) (modify?W (scope consist)
)
(defrule true-knight
(world (tag?N) (scope consist))
?C ← (claim (content T?X) (reason?N) ›
(printout t
?X "is a knight";;?X " – правдолюбец"
crlf) (retract?C)
)
(defrule false-knave
(world (tag?M) (scope consist))
?C ← (claim (content F?X) (reason?N))
(printout t
?X " is a knave";;?X " – лжец"
crlf)
(retract?C))
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.