8. ВСТРОЕННЫЕ ПРЕДИКАТЫ И ОПЕРАТОРЫ

Встроенными предикатами языка являются goal(), alarm(E), ''(Set) и element(Value,I1,...,Ik), определяемые в тексте программы, а также предопределённые предикаты:

Кроме того, в языке определены встроенные управляющие операторы, использование которых может нарушить полноту программы относительно её декларативной семантики:

Встроенный оператор отсечения устраняет все неисследованные пути (точки выбора), которые встретились с момента начала исполнения предиката, в соответствие которому было поставлено предложение, содержащее оператор.

Результаты исполнения оператора "обращение к отладчику" должны быть определены в конкретной реализации языка.

В программе не допускается определение предикатов, имена которых совпадают с именами предопределённых предикатов и встроенных управляющих операторов. Не разрешается использование таких имён в качестве предикатных символов в акторных и дальних вызовах.

Неверное число аргументов в предопределённых предикатах и встроенных управляющих операторах является синтаксической ошибкой.

Примечание. Обозначение оператора '!' с помощью ограничителя "!" рассмотрено в разделе 6.2.

Пример. Использование оператора отсечения.

Рассмотрим поведение фрагмента программы

     goal:-
          write("<1>"),
          subgoal_a,
          write("<7>").
     goal:-
          write("<8>").

     subgoal_a:-
          write("<2>"),
          subgoal_b, !,       -- отсечение
          write("<4>"),
          fail.
     subgoal_a:-
          write("<6>").

     subgoal_b:-
          write("<3>").
     subgoal_b:-
          write("<5>").
Если убрать оператор отсечения, программа напечатает:
     <1><2><3><4><5><4><6><7>
При наличии оператора отсечения будет напечатано:
     <1><2><3><4><8>

Ссылки: акторный вызов 6.2, актуализация 8.2, вызов предиката 6.2, дальний вызов 6.2, исключительная ситуация 7.5, исполнение предиката 6.3.1, предложение 6, программа 4, разрушающее присваивание 8.1, унифицировать 3.3, alarm 7.5, break 7.5, copy 8.2, element 6.2.1, goal 5.4.1, ! 6.2, '' 2.1.2, ':=' 8.1, '==' 3.3.


Следующий: 8.1. КОРРЕКТНОЕ РАЗРУШАЮЩЕЕ ПРИСВАИВАНИЕ
Предыдущий: 7.5. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ


8.1. КОРРЕКТНОЕ РАЗРУШАЮЩЕЕ ПРИСВАИВАНИЕ
8.2. АКТУАЛИЗАЦИЯ ПРОИЗВОДНЫХ ЗНАЧЕНИЙ
КОРНЕВАЯ СТРАНИЦА
ОГЛАВЛЕНИЕ
СПИСОК ПОНЯТИЙ ЯЗЫКА (ИНДЕКС)