To place your funcinline function as an operator +(along with many others), you will need to determine the priority order for funcand its arguments. You can achieve this in SWI-PROLOG with 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.