Matching

## 4.6 Matching

In ECLiPSe you can write clauses that use matching (or one-way unification) instead of head unification. Such clauses are written with the ?- functor instead of :-. Matching has the property that no variables in the caller will be bound. For example

>     p(f(a,X)) ?- writeln(X).

will fail for the following calls:

>     ?- p(F).
>     ?- p(f(A,B)).
>     ?- p(f(A,b)).

and succeed (printing b) for

>     ?- p(f(a,b)).

Moreover, the clause

>     q(X,X) ?- true.

will fail for the calls

>     ?- q(a,b).
>     ?- q(a,B).
>     ?- q(A,b).
>     ?- q(A,B).

and succeed for

>     ?- q(a,a).
>     ?- q(A,A).