Prolog: Ein Mensch ist ein Geschwister von sich selbst?
Ich habe Probleme zu verstehen, warum mein Code in Prolog etwas tut, das auf der Reihenfolge basiert, in der ich meine Regeln eingebe.
Hier ist meine Datenbank:
parent(tom, bob).
parent(tom, liz).
parent(mary, bob).
parent(mary, liz).
male(tom).
male(bob).
female(mary).
female(liz).
Und hier sind die Regeln:
%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).
Das Problem ist, dass, wenn ich das tue,
?- sibling(bob, X).
Ich bekomme
X = bob ;
X = liz ;
false.
Aber wenn ich die Reihenfolge ändere (ich setze Differenz (X, Y) am letzten Teil)
sibling(X, Y) :-
mother(M, X), mother(M, Y),
father(F, X), father(F, Y),
difference(X, Y).
und ich rufe an
?- sibling(bob, X).
Ich bekomme
X = liz;
false.
was ist was ich will.
Bisher habe ich nur gesehen, dass es bei der Rekursion auf die Reihenfolge der Regeln ankommt. Also verstehe ich nicht, wie Bob immer noch ein Geschwister von sich ist, nur weil ich den Unterschiedscheck an erster Stelle stelle.
Danke für jede Hilfe!