Чтение онлайн

на главную

Жанры

Программирование на языке Пролог для искусственного интеллекта

Братко Иван

Шрифт:

 рассм_да( Цель2, Трасса, Ответ).

% Положительный ответ на Цель2

рассмотреть( Цель1 или Цель2, Трасса,

 Ответ1 и Ответ2) :- !,

 not рассм_да( Цель1, Трасса, _ ),

 not рассм_да( Цель2, Трасса, _ ),

% Нет положительного ответа

 рассмотреть( Цель1, Трасса, Ответ1),

% Ответ1 отрицательный

 рассмотреть(
Цель2, Трасса, Ответ2).

% Ответ2 отрицательный

рассмотреть( Цель, Трасса,

 Цель это Ответ было сказано) :-

 ответпольз( Цель, Трасса, Ответ). % Ответ дан пользователем

рассм_да( Цель, Трасса, Ответ) :-

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

 положительный( Ответ).

продолжить( Ответ1, Цель1 и Цель2, Трасса, Ответ) :-

 положительный( Ответ1),

 рассмотреть( Цель2, Трасса, Ответ2),

 ( положительный( Ответ2), Ответ = Ответ1 и Ответ2;

 отрицательный( Ответ2), Ответ = Ответ2).

продолжить( Ответ1, Цель1 и Цель2, _, Ответ1) :-

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

истинность( Вопрос это ПравдаЛожь было Найдено,

 ПравдаЛожь) :- !.

истинность( Ответ1 и Ответ2, ПравдаЛожь) :-

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

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

 ПравдаЛожь = правда;

 ПравдаЛожь = ложь.

положительный( Ответ) :-

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

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

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

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

14.5.2. Процедура 

ответпольз

Прежде чем перейти к написанию процедуры

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

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

В процессе диалога часто возникает ситуация, когда от пользователя ожидается ответ "да", "нет" или "почему". Процедура

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

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

 read( Ответ1),

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

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

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

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

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

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

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

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

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

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

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

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

Следует заметить, что процедурой

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

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

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

...

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

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

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

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

... )

Процедура

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

спрашивает пользователя об истинности утверждения

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

Сначала процедура

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

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

которое в дальнейшем будет усовершенствовано. Если спросить можно, то утверждение

Цель
выдается пользователю, который, в свою очередь, указывает истинно оно или ложно. Если пользователь спросит "почему", то ему выдается
Трасса
. Если утверждение
Цель
истинно, то пользователь укажет также значения содержащихся в нем переменных (если таковые имеются).

Все вышеизложенное можно запрограммировать (в качестве первой попытки) следующим образом:

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

 можно_спросить( Цель), % Можно ли спрашивать

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

% Задать вопрос относительно утверждения Цель

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

 показать( Цель),

% Показать пользователю вопрос

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6