Чтобы расположить вашу функцию func
как встроенную, так же как оператор +
(наряду со многими другими), вам необходимо определить порядок приоритета для func
и его аргументов.Вы можете добиться этого в SWI-PROLOG с помощью op/3
.
Например, директива (предшествующий код, где используется func/2
):
:- op(500,yfx,func).
Чтобы реализовать func/2
, вы можете либо написать мета-интерпретатор для вашего языка (то есть вы пишете программу PROLOG, которая анализирует выражения терминов, включая func
и интерпретирует их по вашему желанию), либо если func/2
строго арифметический,Вы можете использовать arithmetic_function / 1 также в качестве директивы, как указано ниже:
:- arithmetic_function(func/2).
Проверка этого с использованием следующего определения для func/2
:
func(X, Y, Z) :-
Z is X + Y.
Дает, с вашим примером:
?- A is (2 func 3) func (4 func (2+1)).
A = 12.