истинность( Ответ, правда).

        отрицательный( Ответ) :-

                истинность( Ответ, ложь).

Рис. 14. 10.  Основная процедура оболочки экспертной системы.

14. 5. 2.    Процедура    ответпольз

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

        принять( Ответ)

В процессе диалога часто возникает ситуация, когда от пользователя ожидается ответ 'да', 'нет' или 'почему'. Процедура принять предназначена для того, чтобы извлечь один из этих ответов, понимая его правильно и в тех случаях, когда пользователь применяет сокращения ('д' или 'н') или делает ошибки. Если ответ пользователя непонятен, то принять просит дать другой вариант ответа.

        принять( Ответ) :-

                read( Ответ1),

                означает( Ответ1, Значение),  !,

                                                            % Ответ1 означает что-нибудь?

                Ответ = Значение;         % Да

                nl, write( 'Непонятно, попробуйте еще раз,      % Нет

                                                        пожалуйста'),   nl,

                принять( Ответ).           % Новая попытка

        означает( да, да).

        означает( д, да).

        означает( нет, нет).

        означает( н, нет).

        означает( почему, почему).

        означает( п, почему).

Следует заметить, что процедурой принять нужно пользоваться с осторожностью, так как она содержит взаимодействие с пользователем. Следующий фрагмент программы может служить примером неудачной попытки запрограммировать интерпретацию ответов пользователя:

        принять( да), интерп_да( ...);

        принять( нет), интерп_нет( ...);

        . . .

Здесь, если пользователь ответит 'нет', то программа попросит его повторить свой ответ. Поэтому более правильный способ такой:

        принять( Ответ),

        ( Ответ = да, интерп_да( ...);

          Ответ = нет, интерп_нет( ...);

          ... )

        Процедура

        ответпольз( Цель, Трасса, Ответ)

спрашивает пользователя об истинности утверждения Цель. Ответ - это результат запроса. Трасса используется для объяснения в случае, если пользователь спросит 'почему'.

Сначала процедура ответпольз должна проверить, является ли Цель информацией, которую можно запрашивать у пользователя. Это свойство объекта Цель задается отношением

        можно_спросить( Цель)

которое в дальнейшем будет усовершенствовано. Если спросить можно, то утверждение Цель выдается пользователю, который, в свою очередь,

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату