Search code examples
prologprolog-toplevelcommutativity

Commutativity of disjunction in Prolog


I've just started learning Prolog and I encountered a problem that I don't understand. When I ask:

?- fail; true.

Prolog answers:

true

Which is something I expected. But, if I ask:

?- true; fail.

Prolog answers:

true ;
false.

..and I don't understand why. The disjunction operator should be commutative. Why are these two Prolog answers different?


Solution

  • it's just a detail of top level interaction, then you could observe a different behaviour depending on Prolog interpreter you're using.

    SWI-Prolog, in introductory documentation, gives some information:

    2.1.2 Executing a query

    After loading a program, one can ask Prolog queries about the program. The query below asks Prolog what food `sam' likes. The system responds with X = if it can prove the goal for a certain X. The user can type the semi-colon (;) or spacebar6 if (s)he wants another solution. Use the return key if you do not want to see the more answers. Prolog completes the output with a full stop (.) if the user uses the return key or Prolog knows there are no more answers. If Prolog cannot find (more) answers, it writes false.