Prolog Stammbaum
Habe ich es aber nicht zeigt Antworten, Wenn ich Fragen über die Brüder,Schwestern,Onkel,Tanten
Dies ist, was ich schrieb, was ist falsch ?
/*uncle(X, Y) :– male(X), sibling(X, Z), parent(Z, Y).*/
/*uncle(X, Y) :– male(X), spouse(X, W), sibling(W, Z), parent(Z, Y).*/
uncle(X,Y) :-
parent(Z,Y), brother(X,Z).
aunt(X,Y) :-
parent(Z,Y), sister(X,Z).
sibling(X, Y) :-
parent(Z, X),
parent(Z, Y),
X \= Y.
sister(X, Y) :-
sibling(X, Y),
female(X).
brother(X, Y) :-
sibling(X, Y),
male(X).
parent(Z,Y) :- father(Z,Y).
parent(Z,Y) :- mother(Z,Y).
grandparent(C,D) :- parent(C,E), parent(E,D).
aunt(X, Y) :– female(X), sibling(X, Z), parent(Z, Y).
aunt(X, Y) :– female(X), spouse(X, W), sibling(W, Z), parent(Z, Y).
male(john).
male(bob).
male(bill).
male(ron).
male(jeff).
female(mary).
female(sue).
female(nancy).
mother(mary, sue).
mother(mary, bill).
mother(sue, nancy).
mother(sue, jeff).
mother(jane, ron).
father(john, sue).
father(john, bill).
father(bob, nancy).
father(bob, jeff).
father(bill, ron).
sibling(bob,bill).
sibling(sue,bill).
sibling(nancy,jeff).
sibling(nancy,ron).
sibling(jell,ron).
Und noch eins, wie kann ich das optimieren der Herrschaft des Bruders, so dass X ist nicht Bruder zu sich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sieht aus wie einige Ihrer Axiome falsch sind oder fehlen, wenn Sie versuchen, zu replizieren, das Diagramm.
fehlt:
falsch:
Kann dies bewirken, dass die Geschwister der Regel zu Konflikten. Aber was weiß ich schon über prolog
Regel der Bruder schon überprüft, ob
brother(bob, bob)
wird scheitern, denn er fordertsibling(X, Y)
, die nicht die stellen Sie sicher, dassX \= Y
schon.Auch, es sieht aus, als ob alles arbeiten auf meinem Rechner, aber ich hatte zu ändern, die Striche auf diesen Linien:
zu:
Yeah, Sie identisch Aussehen, aber die Striche in der top-version sind etwas länger... und schien Probleme zu bereiten, wenn ich "konsultiert" wird die Datei.
Ich nur erwischt, weil ich es erstellt eine Prolog-Farbschema für Notepad++, wenn jemand interessiert ist kann ich es online veröffentlichen.
zur Optimierung der Herrschaft des Bruders, der für X ist nicht Bruder zu sich.
Sollten Sie tun:
Haben Sie einen starken Datenbank von Fakten und eine sehr wichtige Prädikat genannt
parent(X,Y)
. Logisch denken über den Ansatz.a) männliche/weibliche, so
male(X)
oderfemale(X)
muss innerhalb des Prädikatb) X und Y haben die gleiche, aber seien Sie vorsichtig, um entweder
mother
oderfather
Funktion, weil sonst das Ergebnis wird zweimal angezeigt werden.PS: stellen Sie sicher, dass
X/=Y
. =)BSP.:
brother(X,Y):- X/=Y, male(X), father(Father,X), father(Father,Y).
a) Ist eine Männlich/weiblich.
b) Tante/Onkel, Schwester/Bruder der Geschwister der Mama oder Papa.
BSP.:
aunt(X,Y):- female(X), parent(Parent,Y),sister(X,Parent).
PS: Tante kann auch als die Frau von dem Bruder der Geschwister der Mutter oder Vater(Onkel der Ehefrau). Aber in diesem Fall Sie Notwendigkeit, eine neue Tatsache zum Ausdruck, dass eine
married_couple
.aunt(X,Y):- female(X),
parent(Parent,Y),
(sister(X,Parent); (brother(Parent,Uncle),married_couple(Uncle,X))).
Hoffe das funktioniert 😉
Ihre Tante/2 Prädikate werden nicht zusammen gelegt, deshalb Prolog davon ausgegangen, Großelternteil/2, Tante/2. Legen Sie Sie zusammen wie unten oder verwenden Sie
Verwendung Ehepartner/2, aber nicht definieren. Darüber hinaus Prolog übernimmt, sollte es ein Geschwister - /2-Prädikat irgendwo und Verwendungen, von Vater/2. Es tut dies, weil Sie definieren die Liste der Elemente auf der Unterseite des KB. Wieder, legen Sie Sie zusammen, wie unten.
Wie es in anderen Antworten, die Sie verwenden können, nicht(X = Y).
erste:
legen Sie Ihre Fakten auf den Anfang des Codes!
und für den Bruder: