Главная

ПРОЕКТ "ЧЕЛОВЕК. ЗЕМЛЯ. ВСЕЛЕННАЯ"

Инструменты пользователя

Инструменты сайта


project:prolog:listing:dva_igroka



Программа "Два игрока"

Программа «Два игрока» демонстрирует автоматический откат для поиска игроков, играющих в одну игру.

predicates
plays(symbol,symbol)
 
clauses
/* Определяем людей и игры, в которые они играют */
plays(tom,football).
plays(john,soccer).
plays(john,volleyball).
plays(tom,basketball).
plays(tom,volleyball).
plays(john,baseball).
 
goal
/* Определим игры, в которые играют оба человека */
plays(john,G),plays(tom,G), write("John и Tom играют в ", G).
 
/* Результат
John и Tom играют в volleyball
*/

Данная цель есть связка двух подцелей. Каждая подцель содержит переменную G. Задача заключается в нахождении значения для G, удовлетворяющего обеим подцелям.

Чтобы вычислить первую подцель plays(john,G), Пролог ищет в базе данных сопоставимое утверждение. Первый объект утверждения plays(john,soccer) сопоставим с первым объектом первой подцели, так что подцель успешно вычисляется и переменная G получает значение soccer.

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

Далее Пролог пытается вычислить вторую подцель. Так как G имеет значение soccer, то эта подцель есть plays(tom,soccer). Пролог просматривает базу данных в поиске утверждения, сопоставимого с этой подцелью. Сопоставимых утверждений нет, поэтому подцель неуспешна.

Так как вторая подцель неуспешна, переменная G освобождается и Пролог снова начинает поиск утверждения для вычисления подцели plays(john,G).

Поиск начинается с указателя отката, отмеченного цифрой 1.

Следующее сопоставляемое утверждение – это plays(john,volleyball). Переменная G получает значение volleyball. Снова указатель отката помещается на следующее утверждение. Теперь Пролог пытается вычислить вторую подцель plays(tom,volleyball). Во время этой попытки удается найти сопоставимое утверждение. Присвоение переменной G значения volleyball приводит к успеху.

Обе подцели удовлетворены. Больше подцелей нет, поэтому вся исходная цель оказывается успешно вычисленной.

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

Откат является автоматическим инициируемым системой процессом, если не используются средства управления им.

!!Рекомендуем: Семейная Энциклопедия ЗдоровьяОбучениеКонсультация аналитикаОглавлениеГлавная сайта

Обсуждение

Ваш комментарий:
K Z I B B
 
project/prolog/listing/dva_igroka.txt · Последние изменения: 2012/02/23 11:55 (внешнее изменение)

Вы можете оставить свои комментарии в разделе "Обсуждение".
Рекомендуем оформить подписку на новости данного раздела. Для этого нажмите на кнопку "Подписаться", расположенную справа снизу каждой страницы (знак конверта).


www.work-zilla.com

Индекс цитирования