Ich tat es, aber es zeigt keine Antworten Wenn ich nach den Brüdern, Schwestern, Onkeln, Tanten frage
Das habe ich geschrieben, was ist los?
%Vor%Und noch eine Sache, wie optimiere ich die Regel des Bruders, damit X kein Bruder für sich selbst ist.
Es sieht so aus, als ob einige Ihrer Axiome falsch sind oder fehlen, wenn Sie versuchen, das Diagramm zu replizieren.
fehlt:
%Vor%falsch:
%Vor%Dies könnte dazu führen, dass die Nebenregel einen Konflikt verursacht. Aber was weiß ich über Prolog
? Ihre Bruderregel überprüft bereits, dass brother(bob, bob)
fehlschlägt, weil sie sibling(X, Y)
aufruft, wodurch die Überprüfung sichergestellt wird, dass X \= Y
bereits vorhanden ist.
Es sieht auch so aus, als würde alles auf meinem Rechner funktionieren, aber ich musste die Striche in diesen Zeilen ändern:
%Vor%zu:
%Vor%Ja, sie sehen identisch aus, aber die Striche in der Top-Version sind etwas länger ... und schienen Probleme zu verursachen, als ich die Datei "konsultierte".
Ich habe das nur bemerkt, weil ich ein Prolog-Farbschema für Notepad ++ erstellt habe. Wenn jemand daran interessiert ist, kann ich es online posten.
um die Regel des Bruders für X zu optimieren, ist kein Bruder für sich selbst.
Sie sollten tun:
%Vor% Sie haben eine starke Datenbank mit Fakten und einem sehr wichtigen Prädikat namens parent(X,Y)
. Denken Sie logisch über den Ansatz nach.
male(X)
oder female(X)
muss innerhalb des Prädikats mother
oder father
function zu verwenden, da sonst das Ergebnis zweimal angezeigt wird. X/=Y
. =) Beispiel:
brother(X,Y):- X/=Y, male(X), father(Father,X), father(Father,Y).
Beispiel:
aunt(X,Y):- female(X), parent(Parent,Y),sister(X,Parent).
PS: Tante kann auch als Ehefrau des Bruders der Mutter oder des Vaters des Bruders (der Ehefrau des Onkels) betrachtet werden. Aber in diesem Fall müssen Sie eine neue Tatsache einführen, die ein married_couple
ausdrückt.
aunt(X,Y):- female(X),
parent(Parent,Y),
(sister(X,Parent); (brother(Parent,Uncle),married_couple(Uncle,X))).
Ich hoffe, das funktioniert;)
Ihre Tante / 2-Prädikate werden nicht zusammen platziert, daher nimmt Prolog an, dass Großeltern / 2 Tante / 2 ist. Lege sie wie unten zusammen oder benutze
%Vor%Sie verwenden Ehepartner / 2, aber definieren Sie es nicht. Außerdem geht Prolog davon aus, dass es irgendwo ein Geschwister / 2-Prädikat geben sollte und verwendet vater / 2. Dies geschieht, weil Sie eine Liste von Geschwistern unten in Ihrer KB definieren. Setze sie wieder zusammen wie unten.
Wie in anderen Antworten angegeben, können Sie nicht (X = Y) verwenden.
%Vor%Tags und Links prolog