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

на главную - закладки

Жанры

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

Братко Иван

Шрифт:

 принять(Ответ1), % Прочесть ответ

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

% Обработать ответ

обработать( почему, Цель, Трасса, Ответ) :-

% Задан вопрос "почему"

 показать_трассу( Трасса),

% Выдача ответа на вопрос "почему"

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

% Еще раз спросить

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

% Пользователь ответил, что Цель истинна

 Ответ = правда,

 запрос_перем( Цель);

% Вопрос о значении переменных

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

% Потребовать от пользователя новых решений

обработать( нет, Цель, Трасса, ложь).

% Пользователь ответил, что Цель ложна

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

 nl, write( 'Это правда:'),

 write( Цель), write( ?), nl.

Обращение к процедуре

запрос_перем( Цель)
нужно для того, чтобы попросить пользователя указать значение каждой из переменных, содержащихся в утверждении
Цель
:

запрос_перем( Терм) :-

 var( Терм), !, % Переменная ?

 nl, write( Терм), write( '='),

 read( Терм). % Считать значение переменной

запрос_перем( Терм) :-

 Терм =.. [Функтор | Аргументы],

% Получить аргументы структуры

 запрос_арг( Аргументы).

% Запросить значения переменных в аргументах

запрос_арг( []).

запрос_арг( [Терм | Термы]) :-

 запрос_перем( Терм),

 запрос_арг( Термы).

Проведем несколько экспериментов с процедурой

ответпольз
. Пусть, например, известно, что пользователя можно спрашивать о наличии бинарного отношения
ест
:

можно_спросить( X ест Y).

(В приведенных ниже диалогах между пролог-системой и пользователем тексты пользователя даются полужирным шрифтом, а реплики пролог-системы курсивом).

?- ответпольз( питер ест мясо, [], Ответ).

Это правда: питер ест мясо? % Вопрос пользователю

да. % Ответ пользователя

Ответ = правда

Более интересный пример диалога (с использованием переменных) мог бы выглядеть примерно так:

?- ответпольз(
Кто ест Что, [], Ответ).

Это правда: _17 ест _18?

% Пролог дает переменным свои внутренние имена

да.

_17 = питер.

_18 = мясо.

Ответ = правда.

Кто = питер

Что = мясо; % Возврат для получения других решений

Это правда: _17 ест _18?

да.

_17 = сьюзен.

_18 = бананы.

Ответ = правда

Кто = сьюзен

Что = бананы;

Это правда : _17 ест _18?

нет.

Ответ = ложь

14.5.3. Усовершенствование процедуры 

ответпольз

Один из недостатков нашей процедуры

ответпольз
, который хорошо виден из приведенного выше диалога, — это появление на выходе системы имен, генерируемых пролог-системой, что выглядит довольно неуклюже. Символы, подобные _17, следовало бы заменить на более осмысленные слова.

Другой, более серьезный дефект этой версии процедуры

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

Давайте исправим эти два дефекта. Во-первых, улучшение внешнего вида запросов системы будет основано на введении стандартного формата для каждой "запрашиваемой" цели. Для этого в отношение

можно_спросить
мы добавим второй аргумент, который и будет задавать этот формат, как видно из следующего примера:

можно_спросить(X ест Y, 'Животное' ест 'Что-то').

При передаче запроса пользователю каждая переменная вопроса должна быть заменена на ключевое слово, взятое из формата, например:

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

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

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

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

Измена. Отбор для предателя

Лаврова Алиса
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Отбор для предателя

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Хроники странного королевства. Вторжение. (Дилогия)

Панкеева Оксана Петровна
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9