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

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

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

(defrule con)
 0(world (tag?N(context?S))
(claim (content AND?P?X?Q?Y) (reason?N)
(scope?V)) ›
(assert (claim
(content?P?X) (reason?N) (scope?V)
(context?S))) (assert (claim
(content?Q?Y) (reason?N) (scope?V)
(context?S))))

Прежде чем запустить программу на выполнение, сформируем исходные факты в соответствии с условиями задачи Р4:

(deffacts the-facts
(world)
(statement (speaker A) (claim AND F A F B) (tag 1)))

После запуска программы в режиме трассировки интерпретатор сформирует распечатку процесса ее выполнения, приведенную в листинге А.2.

Листинг А.2. Трассировка решения задачи Р4.

CLIPS> (reset)
= › f-0 (initial-fact)
= › f-1 (world (tag 1) (scope truth) (context 0))
= › f-2 (statement (speaker A)
(claim OR F A T B) (reason 0) (tag 1))
CLIPS> (run)
FIRE 1 unwrap-trues f-1,f-2
Assumption
A is a knight, so (OR F A T B) is true.
= › f-3 (claim (content OR F A T B)
(reason 1) (scope truth) (context 0))
= › f-4 (claim (content T A) (reason 1)
(scope truth) (context 0)) FIRE 2 left-or: f-1,f-3
= › f-5 (claim (content F A) (reason 1)
(scope truth) (context 1))
<== f-1 (world (tag 1) (scope truth) (context 0))
= › f-6 (world (tag 1) (scope truth) (context 1))
FIRE 3 contra-truth-scope: f-6,f-4,f-5
Disjunct 1 is inconsistent with earlier truth context.
<== f-5 (claim (content F A) (reason 1)
(scope truth) (context 1)) FIRE 4 right-or: f-6,f-3.
= › f-7 (claim (content Т В) (reason 1)
(scope truth) (context 2))
<== f-6 (world (tag 1) (scope truth)
(context 1))
= › f-8 (world (tag 1) (scope truth)
(context 2))
FIRE 5 consist-truth: f-8, f-2
Statement is consistent:
<== f-8 (world (tag 1) (scope truth) (context 2))
= › f-9 (world (tag 1) (scope consist) (context 2))
FIRE 6 true-knight: f-9, f-7
В is a knight
<== f-7 (claim (content Т В) (reason 1)
(scope truth) (context 2))
FIRE 7 true-knight: f-9,f-4
A is a knight
<== f-4 (claim (content Т A) (reason 1)
(scope truth) (context 0))
CLIPS>
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.