prologprolog-toplevel

Order of unification in lists when using pipe(|)


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?


Solution

  • 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: