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

на главную

Жанры

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

Братко Иван

Шрифт:

формат( Атом, Имя, Атом, Перем, Перем) :-

 atomic( Атом), !,

 atomic( Имя).

формат( Цель, Форм, Вопрос, Перем0, Перем) :-

 Цель =.. [Функтор | Apг1],

 Форм =.. [Функтор | Форм1],

 формвсе( Apг1, Форм1, Арг2, Перем0, Перем),

 Вопрос =.. [Функтор | Арг2].

формвсе( [], [], [], Перем, Перем).

формвсе( [X |
СпХ], [Ф | СпФ], [В | СпВ], Перем0, Перем) :-

 формвсе( СпХ, СпФ, СпВ, Перем0, Перем1),

 формат( X, Ф, В, Перем1, Перем).

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

запрос_перем( [Переменная/Имя | Переменные]) :-

 nl, write( Имя), write( '='),

 read( Переменная),

 запрос_перем( Переменные).

выд_трассу( []) :-

 nl, write( 'Это был ваш вопрос'), nl.

выд_трассу( [Цель по Прав | Трасса] ) :-

 nl, write( 'Чтобы проверить по' ),

 write( Прав), write( ', что'),

 write( Цель),

 выд_трассу( Трасса).

конкретный( Терм) :-

 нумпер( Терм, 0, 0). % Нет переменных в Терм'е

% конкретизация( Т1, Т2) означает, что Т2 - конкретизация Т1,

% т.е. терм Т1 - более общий, чем Т2, или той же степени

% общности, что и Т2

конкретизация( Терм, Терм1) :-

% Терм1 - частный случай Терм'а

 копия( Терм1, Терм2),

% Копия Терм1 с новыми переменными

 нумпер( Терм2, 0, _), !,

 Терм = Терм2. % Успех, если Терм1 - частный случай Терм2

копия( Терм, НовТерм) :-

% Копия Терм' а с новыми переменными

 asserta( copy( Терм) ),

 retract( сору( НовТерм) ), !.

посл_индекс( 0). % Начальный индекс для "сказано"

след_индекс( Инд) :- % Следующий индекс для "сказано"

 retract( посл_индекс( ПослИнд) ), !,

 Инд is ПослИнд + 1,

 assert( посл_индекс( Инд) ).

Рис. 14.11. Оболочка экспертной системы: Вопросы к пользователю и ответы на вопросы "почему".

Отношение, подобное

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

нумпер( Терм, N, Nплюс1) :-

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

 Терм =
пер/N,

 Nплюс1 is N + 1.

нумпер( Терм, N, М) :-

 Терм =.. [Функтор | Аргументы], % Структура или атом

 нумарг( Аргументы, N, M).

% Пронумеровать переменные в аргументах

нумарг( [], N, N) :- !.

нумарг( [X | Спис], N, M) :-

 нумпер( X, N, N1),

 нумарг( Спис, N1, М).

14.5.4. Процедура выдать

Процедура

выдать( Ответ)

приведенная на рис. 14.12, показывает пользователю окончательный результат консультационного сеанса и дает объяснения типа "как".

Ответ
включает в себя как ответ на вопрос пользователя, так и дерево вывода, демонстрирующее как система пришла к такому заключению. Сначала процедура
выдать
представляет пользователю свое заключение. Затем, если пользователь пожелает узнать, как это заключение достигнуто, то печатается дерево вывода в некоторой удобной для восприятия форме - это и есть объяснение типа "как". Форма объяснения показана в примере разд. 14.4.3.

14.5.5. Драйвер верхнего уровня

И наконец, для того, чтобы иметь удобный доступ к оболочке из интерпретатора Пролога, нам необходима процедура, выполняющая функцию "драйвера". На рис. 14.13 показано, как могла бы выглядеть предназначенная для этой цели процедура

эксперт
. Драйвер
эксперт
производит запуск трех основных модулей оболочки (рис. 14.10–14.12) и координирует их работу. Например:

?- эксперт.

Пожалуйста, спрашивайте: % Приглашение пользователю

X это животное и голиаф это X. % Вопрос пользователя

Это правда: голиаф имеет шерсть?

...

% Выдача заключения консультационного сеанса и

% объяснения типа "как"

выдать( Ответ) :-

 nl, заключение( Ответ),

 nl, write( 'Хотите узнать, как?'),

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

 ( Ответ1 = да, !, отобр( Ответ);

true). % Показ решающего дерева

заключение( Ответ1 и Ответ2) :- !,

 заключение( Ответ1), write( 'и'),

 заключение( Ответ2).

заключение( Заключение было Найдено) :-

 write( Заключение).

% "отобр" отображает полное решающее дерево

отобр( Решение) :-

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

Черный Маг Императора 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