-?-> at the beginning of the clause
body specifies that one-way matching should be used
instead of full unification in the clause head:
p(f(X)) :-
-?->
q(X).
Using the ?- operator in the neck of the clause (instead of
:-) is an alternative way of expressing the same, so the following
is equivalent to the above:
p(f(X)) ?-
q(X).
Pattern matching can be used for several purposes:
get_attr(X{A}, Attr) :-
-?->
A = Attr.
This predicate can be used to return the attribute of a given
attributed variable and fail if it is not one.
:- mode get_attr(?, -).
get_attr(X{A}, A) :-
-?->
true.
but in this case it must not be called with its second argument
already instantiated.