Процедура present

Процедура present! Answer)

приведенная в листинге 16.5, отображает окончательный результат сеанса эксперт­ной консультации и вырабатывает объяснение последовательности рассуждений. Па­раметр Answer включает и ответ на вопрос пользователя, и дерево доказательства, показывающее, как было получено это заключение. Процедура present вначале вы­дает заключение. А если пользователь затем пожелает увидеть, как было сформиро­вано это заключение, введя вопрос "how", то в некоторой приемлемой форме отобра­жается дерево доказательства, которое представляет собой объяснение последова­тельности рассуждений. Форма такого объяснения показана на примерах в разделах 16.2.1 и 16.2.4.

Листинг 16.5. Командный интерпретатор экспертной системы: процедура, которая отображает окончательный результат и выводит объяснение последовательности рассуждений

% Процедура, которая отображает результат экспертной консультации и выводит % объяснение последовательности рассуждений

present; Answer) :-

nl, show-conclusion ( Answer) ,
nl, write( 'Would you like to see how? '),
getreply( Reply) ,
( Reply = yes, ! ,
show( Answer) % Показать дерево решения

true ) . showconclusion ( Answerl and Answer2) :- !, showconclusion; Answerl) , write ( 'and ' ) , showconclusion ( Answer2) .

376 Часть II. Применение языка Prolog в области искусственного интеллекта


showconclusion( Conclusion was Found) :-write( Conclusion).

% Процедура show отображает полное дерево решения


! .

show( Solution) :-

show( Solution, 0) ,

show( Answerl and Answer2, H) :- !, show( Answerl, H) , tab( H) , write( and), nl, show( Answer2, H) .

show( Answer was Found, H) :-tab( H) , writeans( Answer), nl, tab( H) , write ( 'was ' ) , showl( Found, H) .

showl( Derived from Answer, H) :- !, write( Derived), write ( 'from'),

nl, HI is H + 4, show( Answer, HI).


% Установить отступ, равный 0 % Установить отступ, равный Н

% Отступ на Н

% Показать экспертное заключение

% Показать подтверждение

% Вывести имя правила

% Показать исходное высказывание


showl( Found, _) :- % Переменная Found может принимать значения 'told' % (указано пользователем) или 'found as fact' (найдено как факт) write( Found), nl.


writeans( Goal is true) :- !, write( Goal) .

writeans( Answer) :-write( Answer).


%

%

%


Исключить в выводе слова 'is true' (является истинным) Это - отрицательный ответ


16.3.5. Управляющая процедура верхнего уровня

Для обеспечения удобного доступа к командному интерпретатору экспертной сис­темы из среды интерпретатора Prolog требуется управляющая процедура, образцом которой может служить процедура expert (листинг 16.6). После вызова на выполне­ние процедура expert координирует работу трех основных модулей командного ин­терпретатора (см. листинги 16.3-16.5), например, следующим образом: ?- expert.

Question, please: % Приглашение пользователю к вводу вопроса X isa animal and goliath isa X. % Вопрос пользователя Is it true: goliath has hair?