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

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

Жанры

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

Братко Иван

Шрифт:

истинно, если

Терм
не содержит переменных. Другое

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

означает, что

Терм1
есть некоторая конкретизация (частный случай) терма
Терм
, т.е.
Терм
 — это утверждение не менее общее, чем
Терм1
. Например:

конкретизация( X передает информацию Y,

 мэри передает информацию Z)

Обе процедуры основаны на еще одной процедуре:

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

Эта процедура "нумерует" переменные, содержащиеся в

Терм
, заменяя каждую из них на некоторый специальный новый терм таким образом, чтобы эти "нумерующие" термы соответствовали числам от N до M–1, Например, пусть эти термы имеют вид

пер/0, пер/1, пер/2, ...

тогда в результате обращения к системе

?- Терм = f( X, t( a,Y, X) ), нумпер( Терм, 5, М).

мы получим

Терм = f( пер/5, t( а, пер/6, пер/5) )

М = 7

% Процедура

%

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

%

% порождает, используя механизм возвратов, все решения

% для целевого утверждения Цель, которые указал пользователь.

% Трасса - это цепочка целей-предков и правил,

% используемая для объяснения типа "почему".

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

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

 копия( Цель, Копия), % Переименование переменных

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

% Не спрашивать второй раз относительно конкретизированной цели

ответпольз( Цель, _, _, _, N) :-

 N > 1, % Повторный вопрос?

 конкретный( Цель), !, % Больше не спрашивать

 fail.

% Известен ли ответ для всех конкретизации утверждения Цель?

ответпольз( Цель, Копия, _, Ответ, _ ) :-

 сказано( Копия, Ответ, _ ),

 конкретизация( Копия, Цель), !. % Ответ известен

% Найти все известные решения для Цель с индексами, начиная с N

ответпольз( Цель, _, _, правда, N) :-

 сказано( Цель, правда, М),

 М >= N.

% Все уже сказано об утверждении Цель?

ответпольз( Цель, Копия, _, Ответ, _) :-

 конец_ответов( Копия),

 конкретизация( Копия, Цель), !, % Уже все сказано

 fail.

%
Попросить пользователя дать (еще) решения

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

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

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

 можно спросить( Цель, ВнешФормат),

 формат( Цель, ВнешФормат, Вопрос, [], Перем),

% Получить формат вопроса

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

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

 nl,

 ( Перем = [], !, % Сформулировать вопрос

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

 write( 'Есть (еще) решения для :' )),

 write( Вопрос), write( '?'),

 принять( Ответ1), !, % Ответ1 - да/нет/почему

 обработать( Ответ1, Цель, Вопрос, Перем,

Трасса, Ответ, N).

обработать( почему, Цель, Вопрос, Перем,

 Трасса, Ответ, N):-

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

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

обработать( да, Цель,_, Перем, Трасса, правда, N) :-

 след_индекс( Инд),

% Получить новый индекс для "сказано"

 Инд1 is Инд + 1,

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

assertz( сказано( Цель, правда, Инд) );

% Запись решения

 копия( Цель, Копия), % Копирование цели

 ответпольз( Цель, Копия, Трасса, Ответ, Инд1) ).

% Есть еще решения?

обработать( нет, Цель, _, _, _, ложь, N) :-

 копия( Цель, Копия),

 сказано( Копия, правда, _), !,

% 'нет' означает, больше нет решений

 assertz( конец_ответов( Цель) ),

% Отметить конец ответов

 fail;

 след_индекс( Инд),

% Следующий свободный индекс для "сказано"

 assertz( сказано( Цель, ложь, Инд) ).

% 'нет' означает нет ни одного решения

формат( Пер, Имя, Имя, Перем, [Пер/Имя | Перем]) :-

 var( Пер), !.

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

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Бастард Императора. Том 8

Орлов Андрей Юрьевич
8. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 8

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь

Эра Мангуста. Том 2

Третьяков Андрей
2. Рос: Мангуст
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эра Мангуста. Том 2

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

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

Один на миллион. Трилогия

Земляной Андрей Борисович
Один на миллион
Фантастика:
боевая фантастика
8.95
рейтинг книги
Один на миллион. Трилогия

Помещицы из будущего

Порохня Анна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Помещицы из будущего

Шлейф сандала

Лерн Анна
Фантастика:
фэнтези
6.00
рейтинг книги
Шлейф сандала

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Император

Рави Ивар
7. Прометей
Фантастика:
фэнтези
7.11
рейтинг книги
Император

Бандит 2

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

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Чайлдфри

Тоцка Тала
Любовные романы:
современные любовные романы
6.51
рейтинг книги
Чайлдфри