Рис. 14.9. Отношение
рассмотреть( Цель, Трасса, Ответ).
Ответ
— это И/ИЛИ решающее дерево для целевого утверждения
Цель
.
Основными процедурами оболочки будут:
рассмотреть( Цель, Трасса, Ответ)
Эта процедура находит ответ
Ответ
на вопрос
Цель
. Процедура
ответпольз(
Цель, Трасса, Ответ)
порождает решения для тех вопросов
Цель
, которые можно задавать пользователю. Она спрашивает пользователя об истинности утверждения
Цель
, а также отвечает на вопросы "почему". Процедура
выдать( Ответ)
выводит результат и отвечает на вопросы "как". Все эти процедуры приводятся в действие процедурой-драйвером
эксперт
.
14.5.1. Процедура
рассмотреть
Центральной процедурой оболочки является процедура
рассмотреть( Цель, Трасса, Ответ)
которая будет находить ответ
Ответ
на заданный вопрос
Цель
, используя принципы, намеченные в общих чертах в разд. 14.4.1: найти
Цель
среди фактов базы знаний, или применить правило из базы знаний, или спросить пользователя, или же обработать
Цель
как И/ИЛИ-комбинацию подцелей.
Аргументы имеют следующий смысл и следующую структуру:
Цель
вопрос, подлежащий рассмотрению, представленный как И/ИЛИ-комбинация простых утверждений, например
X имеет перья или X летает или
X откладывает яйца
Трасса
цепочка, составленная из целей-предков и правил, расположенных между
Цель
и исходной целью самого верхнего уровня. Представляется как список, состоящий из элементов вида
Цель по Прав
что означает:
Цель
рассматривалась с использованием правила
Прав
. Например, пусть исходной целью будет "питер это тигр", а текущей целью — "питер ест мясо". В соответствии с базой знаний рис. 14.5 имеем трассу
[( питер это хищник) по прав3,
( питер это тигр) по прав5 ]
Смысл ее можно выразить так:
Я могу использовать "питер ест мясо" для того, чтобы проверить по прав3, что "питер это хищник".
Далее, я могу использовать "питер это хищник" для того, чтобы проверить по прав5, что "питер это тигр".
Ответ
решающее И/ИЛИ-дерево для вопроса
Цель
. Общая форма представления для объекта
Ответ
:
Заключение было Найдено
где
Найдено
— это обоснование для результата
Заключение
. Следующие три примера иллюстрируют различные варианты ответов:
(1)
( соед( радиатор, предохр1) это правда) было
'найдено как факт'
(2)
(питер ест мясо) это ложь было
сказано
(3)
(питер это хищник) это правда было
( 'выведено по' прав3 из
(питер это млекопитающее) это правда было
( 'выведено по' прав1 из
(питер имеет шерсть) это правда было сказано)
и
(питер ест мясо) это правда было сказано )
На рис. 14.10 показана прологовская программа для процедуры
рассмотреть
. В этой программе реализованы принципы разд. 14.4.1 с использованием только что описанных структур данных.
% Процедура
%
% рассмотреть( Цель, Трасса, Ответ)
%
% находит Ответ на вопрос Цель. Трасса - это цепочка
% целей-предков и правил. "рассмотреть" стремится найти
% положительный ответ на вопрос. Ответ "ложь" выдается
% только в том случае, когда рассмотрены все возможности,
% и все они дали результат "ложь".
:- op( 900, xfx, :).
:- op( 800, xfx, было).
:- op( 870, fx, если).
:- op( 880, xfx, то).
:- op( 550, xfy, или).
:- op( 540, xfy, и).
:- op( 300, fx, 'выведено по').
:- op( 600, xfx, из).
:- op( 600, xfx, по).
% В программе предполагается,что op( 700, хfх, это), op( 500, fx, не)
рассмотреть( Цель, Трасса, Цель это правда
было 'найдено как факт') :-
факт : Цель.
% Предполагается, что для каждого типа цели
% существует только одно правило
рассмотреть( Цель, Трасса,
Цель это ПравдаЛожь
было 'выведено по' Прав из Ответ) :-
Прав : если Условие то Цель,
% Правило, относящееся к цели
рассмотреть( Условие, [Цель по Прав | Трасса], Ответ),
истинность( Ответ, ПравдаЛожь).
рассмотреть( Цель1 и Цель2, Трасса, Ответ) :- !,
рассмотреть( Цель1, Трасса, Ответ1),
продолжить( Ответ1, Цель1 и Цель2, Трасса, Ответ).
рассмотреть( Цель1 или Цель2, Трасса, Ответ) :-
рассм_да( Цель1, Трасса, Ответ);
% Положительный ответ на Цель1