Логическое программирование на языке Visual Prolog. Солдатова О.П - 24 стр.

UptoLike

24
прекращаются, система вновь рассматривает последовательность Q
1
, Q
2
и
для Q
1
ищется новая унификация в БД, начиная с пятого предложения. Это
и есть возврат. Пятое предложение сразу же дает желаемую унификацию
с подстановкой
σ
2
={X=иван,Y=юлия}. Вновь найденная подстановка
применяется к
σ
1
[Q
2
]= мать(мария, юлия). Этой подцели соответствует
второе предложение БД. Далее указанная процедура повторяется и в итоге
имеем:
Цель: отец(X, Y), мать(мария, Y).
2 решения: X=иван, Y=анна
X=иван, Y=юлия.
Это описание объясняет, как работает утилита TestGoal в Visual
Prolog.
При реализации механизма возврата выполняются следующие правила:
1. Подцели вычисляются слева-направо.
2. Предложения при
вычислении подцели проверяются в
текстуальном порядке, то есть сверху-вниз.
3. Если подцель сопоставима с заголовком правила, то должно быть
вычислено тело этого правила, при этом тело правила образует
новое подмножество подцелей для вычисления.
4. Цель считается успешно вычисленной, когда найден
соответствующий факт для каждой подцели.
Если в Visual Prolog создать программу для
автономного
исполнения (то есть создать свой project-файл для разрабатываемой
программы), то поиск цели в ней будет вестись так же, как для
внутренней цели в PDC Prolog, то есть до первого успешного решения.
2.6 Управление поиском решения.
Встроенный в Пролог механизм поиска с возвратом может привести к
поиску ненужных решений, в результате чего
снижается эффективность
программы в случае, если надо найти только одно решение. В других случаях
бывает необходимо продолжить поиск, даже если решение найдено.
Пролог обеспечивает два встроенных предиката, которые дают
возможность управлять механизмом поиска с возвратом: предикат fail
используется для инициализации поиска с возвратом и предикат отсечения !
используется для запрета возврата
.
Предикат fail всегда имеет ложное значение!
Отсечение так же, как и fail помещается в тело правила. Однако, в
отличие от fail предикат отсечения имеет всегда истинное значение.
При этом выполняется обращение к другим предикатам в теле правила,
следующим за отсечением. Следует иметь в виду, что невозможно
произвести возврат к предикатам, расположенным в
теле правила перед
отсечением, а также невозможен возврат к другим правилам данного
предиката.