Расширение набора правил – работа с составными высказываниями
Ниже приведено правило разделения операции конъюнкции, которое ранее мы предлагали вам разработать самостоятельно. Обратите внимание на то, что в нем также отслеживается контекст, хотя в данном случае без этого можно было бы и обойтись.
(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>