next up previous
Next: Advanced control-structures: blocks Up: Built-In Predicates Previous: Control Predicates

Meta-Call Predicates

 

Meta call predicates are used to call terms constructed at run time. The basic meta-call mechanism offered by SWI-Prolog is to use variables as a subclause (which should of course be bound to a valid goal at runtime). A meta-call is slower than a normal call as it involves actually searching the database at runtime for the predicate, while for normal calls this search is done at compile time.

call( +Goal)

  Invoke Goal as a goal. Note that clauses may have variables as subclauses, which is identical to call/1, except when the argument is bound to the cut. See !/0. .C call [2..] +Goal, +ExtraArg1, ... Append ExtraArg1, ExtraArg2, ... to the argument list of Goal and call the result. For example, call(plus(1), 2, X)

will call plus/3, binding X to 3.

The call/[2..] construct is handled by the compiler, which implies that redefinition as a predicate has no effect. The predicates call/[2-6] are defined as true predicates, so they can be handled by interpreted code.

apply( +Term, +List)

  Append the members of List to the arguments of Term and call the resulting term. For example: `apply(plus(1), [2, X]) ' will call `plus(1, 2, X) '. A pply/2 is incorporated in the virtual machine of SWI-Prolog. This implies that the overhead can be compared to the overhead of call/1.
not +Goal

  Succeeds when Goal cannot be proven. Retained for compatibility only. New code should use \+/1.
once( +Goal)

  Defined as:
once(Goal) :-
	Goal, !.
O nce/1 can in many cases be replaced with ->/2. The only difference is how the cut behaves (see !/0). The following two clauses are identical:
1) a :- once((b, c)), d.
2) a :- b, c -> d.
ignore( +Goal)

  Calls Goal as once/1, but succeeds, regardless of whether Goal succeeded or not. Defined as:
ignore(Goal) :-
	Goal, !.
ignore(_).



next up previous
Next: Advanced control-structures: blocks Up: Built-In Predicates Previous: Control Predicates



Passani Luca
Tue Nov 14 08:58:33 MET 1995