Процедурная семантика

Процедурная семантика (процедурный смысл) пролог-программы определяет, как пролог-программа отвечает на вопросы.
Ответить на вопрос - это значит удовлетворить цели.

Поэтому процедурная семантика пролога - это процедура вычисления списка целей с учетом программы.

 
     
     

 

Рассмотрим программу и на ее примере - процедуру вычисления списка целей.

Входом процедуры являются программа и список целей, выходом процедуры являются признак успех / неуспех и подстановка переменных. Подстановка переменных порождается только в случае успешного завершения. Рассмотрим пример, иллюстрирующий процедурную семантику Пролога:                                              

большой (медведь).                                   % факт 1

большой (слон).                                         % факт 2

маленький (кот).                                       % факт 3

коричневый (медведь).                            % факт 4

черный (кот).                                             % факт 5

серый (слон).                                                   % факт 6

темный (Z):- черный (Z).                           % правило 1:

темный (Z):- коричневый (Z).                        % правило 2:

 

?- темный (Х), большой (Х). 

                                 Шаги вычисления:

Исходный список целевых утверждений:

                              темный (Х), большой (Х).

Просмотр всей программы от начала к концу и поиск предложения, у которого голова совпадает с первым целевым утверждением темный (Х).

Найдено правило 1:

                              темный (Z):- черный(Z).

Порождается новый список целевых утверждений

                              черный (Х), большой (Х)

Просмотр программы для нахождения предложения, сопоставимого с черный (Х). Найдено предложение 5: черный (кот). У этого предложения нет тела, поэтому список целей при соответствующей конкретизации сокращается до

                              большой (кот)

Просмотр программы в поисках цели большой (кот). Ни одно предложение не найдено. Поэтому происходит возврат к шагу (3) и отмена конкретизации Х = кот. Список целей теперь снова

                              черный (Х), большой (Х)

Продолжение просмотра программы ниже факта 5. Ни одно предложение не найдено. Поэтому возврат к шагу (2) и продолжение просмотра ниже правила 1. Найдено

Правило 2:             темный (Z), коричневый (Z)

Замена первой цели в списке на коричневый (Х) дает

                              коричневый (Х), большой(Х)

Просмотр программы для обнаружения предложения, сопоставимого коричневый (Х). Найдено предложение коричневый (медведь). У этого предложения нет тела, поэтому список целей уменьшается до

                              большой (медведь)

6. Просмотр программы и обнаружение факта большой (медведь). У него нет тела, поэтому список целей становится пустым. Это указывает на успешное завершение процедуры.

       Таким образом, для вычисления целей потребовалось 7 сопоставлений и один откат.

   Рассмотрим список целей:

G1 G2 Gm

 

1. Если список целей пуст, то имеем успех, если нет, то выполнятся пункт 2.

2. Берется первая цель G1 из списка. Пролог выбирает в базе данных,

просматривая сначала, первое предложение С:
                          С:- B1, B2,..., Bn
голова которого, сопоставляется с целью G1.
  Если такого предложения нет, то неудача.
Если есть, то переменные конкретизируются, и цель G1 заменяется на список целей

B1 B2 Bn

с конкретизированными значениями переменных.

3. Рассматривается рекурсивно через п.2 новый список целей.

B1 B2 Bn G2 Gm

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

 









Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: