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

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

Жанры

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

Братко Иван

Шрифт:

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

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

конкретизация( Терм, Терм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( Пер), !.

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

Лорд Системы 12

Токсик Саша
12. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 12

Младший научный сотрудник 2

Тамбовский Сергей
2. МНС
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Младший научный сотрудник 2

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Цеховик. Книга 2. Движение к цели

Ромов Дмитрий
2. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цеховик. Книга 2. Движение к цели

Неестественный отбор.Трилогия

Грант Эдгар
Неестественный отбор
Детективы:
триллеры
6.40
рейтинг книги
Неестественный отбор.Трилогия

Попаданка в семье драконов

Свадьбина Любовь
Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.37
рейтинг книги
Попаданка в семье драконов

Звезда сомнительного счастья

Шах Ольга
Фантастика:
фэнтези
6.00
рейтинг книги
Звезда сомнительного счастья

Беглец

Кораблев Родион
15. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Беглец

Я – Орк

Лисицин Евгений
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я – Орк

Смерть может танцевать 2

Вальтер Макс
2. Безликий
Фантастика:
героическая фантастика
альтернативная история
6.14
рейтинг книги
Смерть может танцевать 2

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

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

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

Гром над Империей. Часть 1

Машуков Тимур
5. Гром над миром
Фантастика:
фэнтези
5.20
рейтинг книги
Гром над Империей. Часть 1