6.2.1. ВЫЗОВЫ ФУНКЦИЙ

"Вызовом функции" называется синтаксическая конструкция, имитирующая вызов подпрограммы-функции.

В составе предложений разрешается использовать следующие вызовы функций:

 вызов_функции_в_предложении =
    [ целевой_параметр ] "?" простой_атом |
    целевой_параметр "[" термы_и_выражения "]"

В качестве простых атомов в составе вызовов функций не разрешается использовать метапеременные.

Если в составе вызова функции целевой параметр не задан явно, целевым параметром считается предопределённый атрибут self.

В результате трансляции вызовы функций вида

W ? p(A1,A2,...,An)

преобразуются в вызовы предикатов вида

W ? p(R,A1,A2,...,An) ,

а  вызовы функций вида

X [A1,A2,...,An]

- в вызовы предикатов вида

X ? element(R,A1,A2,...,An) ,

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

В случае если вызов функции используется в составе некоторой подцели SA, вызов предиката SB, соответствующий этому вызову функции, добавляется в состав предложения перед подцелью SA. При этом гарантируется, что подцель SB будет помещена перед любой другой подцелью, в состав которой войдёт переменная R, обозначающая результат рассматриваемого вызова функции, но после всех подцелей, находившихся перед подцелью SA в исходном предложении.

Если вызов функции используется в заголовке предложения вида

Заголовок:- Конъюнкция.

и не является составной частью другого вызова функции, вызов предиката S, соответствующий этому вызову функции, добавляется в состав предложения после конъюнкции подцелей "Конъюнкция":

Заголовок:- Конъюнкция, S.

Если вызов функции FC1 в заголовке предложения входит в состав другого вызова функции FC2, в этом случае FC1 рассматривается как вызов функции, входящий в состав подцелей предложения, поставленных в соответствие вызову функции FC2.

Примечание. В соответствии с правилами исполнения вызова предиката, определёнными в разделе 6.3.1, вызовами функций считаются также такие подцели метапредложений, атомарная формула которых является метапеременной, при условии что рассматриваемое метапредложение поставлено в соответствие вызову функции.

Пример. Определение функции append.

Определение функции append, добавляющей элементы в конец списка,

append([],L) = L.
append([H|L1],L2) = [H | ?append(L1,L2)].
соответствует процедуре вида
append(L,[],L).
append(R0,[H|L1],L2):-
    append(R1,L1,L2),
    R0 == [H | R1].

Ссылки: атом 6.1, атрибут 4.1.1, вызов предиката 6.2, заголовок предложения 6, исполнение предиката 6.3.1, конъюнкция 6, метапеременная 3, метапредложение 6, объявление функции 6.1.3, переменная 2.1.1, подцель доказательства 6.3.1, подцель предложения 6.2, предложение 6, простой атом 6.1.1, процедура 6, список 3.2.2, термы и выражения 3.2.1, функция 6.1.3, целевой параметр 4.1.3, self 4.1.1, '==' 3.3.


Следующий: 6.2.2. ВЫРАЖЕНИЯ
Предыдущий: 6.2. ПОДЦЕЛИ ПРЕДЛОЖЕНИЙ


6.2. ПОДЦЕЛИ ПРЕДЛОЖЕНИЙ
КОРНЕВАЯ СТРАНИЦА
ОГЛАВЛЕНИЕ
СПИСОК ПОНЯТИЙ ЯЗЫКА (ИНДЕКС)