I am having trouble trying to figure out in what order unification is done. I have the following query:
[X, like | Z] = [I, Y, Prolog, language].
This gives me the following result:
X = I,
Z = [Prolog, language],
Y = like.
However, what I was expecting is:
X = I,
Y = like,
Z = [Prolog, language].
Is there any specific order in which Prolog unifies terms?
EDIT:
I have a feeling that Prolog is giving higher priority to unification of an atom with a variable
over that of a variable with an atom
. Is that so?
There is no order. Here is the mapping that is performed:
[I, Y , Prolog, language].
| | +--------------+
| | |
[X, like | Z]
if that mapping is possible (i.e. if the variables I
,Y
, X
, Z
are bound to terms that allow unification to succeed)
In this case, assuming that all variables are unbound, then:
Variables I
and X
will become "the same variable" (more clearly, the variable name I
and X
will designate the same empty storage cell)
Variable Y
will become the atom like' (more clearly, the storage cell designated by variable name
Ywill be set to
like`)
Variable Z
takes up the "rest (or suffix) of the list" (everything behind the |
) and will become the complex term `[Prolog, language]'.
Variable Prolog
is not changed and stays what it was.