Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Конкретизация переменных





Рис. 2.9. Описание входов и выходов процедуры., которая выполняет

список целей

Значение двух выходных результатов описано ниже.

1. Индикатор успех а/неудачи принимает значение "yes", если цели являются достижимыми, и "по" в противном случае. Принято говорить, что "yes" ука­зывает на успешное завершение, а "по" — на неудачное.

2. Конкретизация переменных вырабатывается только в случае успешного за­вершения; в случае неудачи конкретизация отсутствует.

В главе 1, в разделе 1.4, "Общие принципы поиска ответов на вопросы системой Prolog", по сути было приведено неформальное описание того, что выполняет проце­дура execute. Б остальной части этого раздела приведено более формальное и систе­матическое описание данного процесса, и его можно пропустить без серьезных опасе­ний, что из-за этого будет затруднено понимание остального материала книги.

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

Для выполнения следующего списка целей:

•31, G2,..., Gm

процедура execute осуществляет описанные ниже действия.


       
   
 

(следующей) операции,

Если список целей пуст, то завершается успешно. Если список целей не пуст, то продолжает работу зываемой "SCANNING".

SCANNING. Сканировать предложения в программе от начала до конца до тех пор, пока не будет обнаружено первое предложение С, такое, что голова С согла­суется с первой целью G1. Если такое предложение отсутствует, процедура оканчивается неудачей.

Если есть такое предложение С в форме

Н:- В1,..., Б.ч.

для получения варианта С Gm не имеют общих пере-

то процедура переименовывает переменные в С предложения С, такого, что С и список G1, менных. Допустим, что С имеет вид

:- В1 '................

допустим, что ре-

Процедура согласовывает цель G1 и голову предложения зультирующей конкретизацией переменных является S.

В списке целей Gl, G2,..., Gm процедура заменяет цель G1 списком В1', что приводит к получению нового списка целей:

В1\ ___ Вп», G2,..., Gm


Глава 2. Синтаксис и значение программ Prolog



(Следует отметить, что если предложение С представляет собой факт, то п = 0 и новый список целей становится короче, чем первоначальный; такое сокращение списка целей может в конечном итоге привести к получению пустого списка и, тем самым, к успешному завершению.)

Затем процедура подставляет вместо переменных в новом списке целей новые значения, которые заданы в конкретизации S, что приводит к получению еще одного списка целей: В11 \..., Bn'', G2'... Gm'

После этого происходит переход к выполнению (рекурсивно, с помощью той же процедуры) этого нового списка целей. Если выполнение этого нового списка целей завершается успешно, то выполнение первоначального списка целей так­же завершается успешно. Если же выполнение нового списка целей оканчивает­ся неудачей, то происходит отказ от этого нового списка целей и возврат через всю программу к операции SCANNING. Сканирование продолжается с предложе­ния, которое непосредственно следует за предложением С (С — это предложе­ние, которое использовалась перед этим), и осуществляется попытка достичь успешного завершения с помощью некоторого другого предложения.

Листинг 2.1. Пример, иллюстрирующий процедурное значение Prolog: трассировка выполнения П р оцедур Ы execute


"> Программа big{ bear). big(elephant). small[ cat).

brown(bear).

black[ cat). gray< elephant).

dark(Z>:-black(Z).


% Предложение 1 * Предложение 2 % Предложение 3

% Предложение 4 % Предложение S

% Предложение 6

Предложение 1 - все звери имеют темную окраску


с черной шерстью


I Предложение S - все звери с коричневой шерсть» % имеют темную окраску

dark(Z):-brown(Z).» Вопрос

Какой из зверей большой и имеет темную окраску?

? - dark (X), big (X). 4 Трассировка выполнения

1) Начал ьнкй список целей: dark (X), big<X).

2) Сканировать программу сверху вниз, отыскивая предложение, голова которого согласуется с первой целью, dark(X). Обнаружено предложение 7:

dark(Z);- black [ Z).

Подставить вместо первой цели конкретизированное тело предложения 7, что

приводит к получению нового списка целей;.

black (X), big{ X)

3) Сканировать программу, чтобы найти согласование с целью black(X). Найдено
предложение 5: black(cat). Это предложение не имеет тела, поэтому список
целей после соответствующей конкретизации сокращается до

big(cat)

4] Сканировать программу, чтобы найти цель big(cat), не обнаружено ни одного

предложения. Поэтому возвратиться к шагу (3) и отменить конкретизацию

х = cat. Теперь список целей снова принимает вид black (X), big(X)

Продолжить сканирование программы ниже предложения 5. Не обнаружено ни одного предложения. Поэтому вернуться к шагу (2) и продолжить сканирование ниже предложения 7. Обнаружено предложение S: dark(Z>:- brown (Z>.

Подставить brown(X) вместо первой цели в списке целей, что приводит к получению списка



Часть I. Язык Prolog


brown (X), bigl X).

5) Сканировать программ;- чтобы согласовать цель Ьгонп( X}, что приводит

к обнаружению цели brown(bear). Это предложение не имеет тела, поэтому список целей сокращается до big(bear)

6) Сканировать программу, что приводит к обнаружению предложения big( bear).
Оно не имеет тела, поэтому список целей сокращается до пустого. Это
указывает на успешное завершение, и соответствующая конкретизация переменной
ике е т вид

X = bear

Эта процедура записана более компактно в листинге 2.2 с использованием систе­мы обозначений, аналогичной языку Pascal.

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

При каждом неудачном завершении рекурсивного вызова execute выполнение воз­вращается к операции SCANNING и работа продолжается с того предложения С про­граммы, которое использовалось перед этим в последнюю очередь. А поскольку исполь­зование предложения С не привело к успешному завершению, система Prolog вынуж­дена предпринять попытку перейти к обработке альтернативного предложения. При этом фактически происходит следующее: система Prolog отказывается от всей этой час­ти неудачного выполнения и возвращается к той точке (к предложению С), с которой началась данная неудачная ветвь выполнения. После того как процедура возвращается к определенной точке, отменяются все конкретизации переменных, которые были вы­полнены после этой точки. Такая организация работы гарантирует, что Prolog система­тически исследует все возможные альтернативные пути выполнения до тех пор, пока не будет найден тот из них, который в конечном итоге приведет к успеху, или пока не будет продемонстрировано, что все эти путл завершаются неудачей.

Как уже было сказано, даже после некоторого успешного завершения пользова­тель может вынудить систему вернуться к поиску дополнительных решений. В при­веденном выше описании процедуры execute эта деталь была опущена.

Безусловно, в фактических реализациях Prolog необходимо добавить к процедуре execute несколько других усовершенствований. Одно из них состоит в сокращении объема сканирования предложений программы для повышения эффективности. По­этому в практических реализациях Prolog осуществляется сканирование не всех предложений программы; рассматриваются только предложения, касающиеся данно­го отношения в текущей цели.





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 574 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Своим успехом я обязана тому, что никогда не оправдывалась и не принимала оправданий от других. © Флоренс Найтингейл
==> читать все изречения...

2396 - | 2209 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.