Prolog: osoba jest rodzeństwem samego siebie?

Mam pewne problemy ze zrozumieniem, dlaczego mój kod w prologu robi coś w oparciu o porządek, w którym umieściłem moje reguły.

Oto moja baza danych:

parent(tom, bob).
parent(tom, liz).
parent(mary, bob).
parent(mary, liz).

male(tom).
male(bob).
female(mary).
female(liz).

A oto zasady:

%difference(X, Y) ==> Predicate to check if two people X and Y are not the same person.
difference(X, Y) :- \==(X, Y).
father(X, Y) :- male(X), parent(X, Y), difference(X, Y).
mother(X, Y) :- female(X), parent(X, Y), difference(X, Y).
sibling(X, Y) :-
    difference(X, Y),
    mother(M, X), mother(M, Y),
    father(F, X), father(F, Y).

Problem polega na tym, że kiedy to robię,

?- sibling(bob, X).

dostaję

X = bob ;
X = liz ;
false.

Ale kiedy zmieniam zamówienie (wstawiam różnicę (X, Y) w ostatniej części)

sibling(X, Y) :-
    mother(M, X), mother(M, Y),
    father(F, X), father(F, Y),
    difference(X, Y).

i dzwonię

?- sibling(bob, X).

dostaję

X = liz;
false.

czego chcę.

Jak dotąd widziałem tylko, że porządkowanie reguł ma znaczenie podczas wykonywania rekursji. Więc nie rozumiem, jak bob wciąż jest rodzeństwem samego siebie, ponieważ najpierw sprawdziłem różnicę.

Dzięki za pomoc!

questionAnswers(2)

yourAnswerToTheQuestion