Call the goal formed by appending the additional argument Arg (and any further arguments given) to GoalPrefix. For example, the following calls are all equivalent and invoke p/2:
call(p, 1, 2) call(p(1), 2) call(p(1,2) )The maximum arity for call/N is the one indicated by get_flag(max_predicate_arity,N), and is at least 255.
These predicates are sensitive to their calling context module in the same way as call/1.
Implementation note: These predicates are materialised lazily the first time they are being invoked. They may therefore not show up with current_built_in/1, get_flag/3 or other similar access methods.
?- call(p, 1, 2, 3).
calling an undefined procedure p(1, 2, 3) in module eclipse
Abort
?- call(append(L, R), [1]).
L = []
R = [1]
Yes (0.00s cpu, solution 1, maybe more)
L = [1]
R = []
Yes (0.00s cpu, solution 2)
?- call(+(3), 4, X).
X = 7
Yes (0.00s cpu)
% A typical use case
filter(_, [], []).
filter(Pred, [X|Xs], Ys) :-
( call(Pred, X) ->
Ys = [X|Ys1],
filter(Pred, Xs, Ys1)
;
filter(Pred, Xs, Ys)
).
?- filter(atom, [1, a, 2, b, c], As).
As = [a, b, c]
Yes (0.03s cpu)
?- filter(integer, [1, a, 2, b, c], As).
As = [1, 2]
Yes (0.06s cpu)
?- filter(<(2), [5, 1, 4, 2, 3], Is).
Is = [5, 4, 3]
Yes (0.00s cpu)