Prolog Stammbaum

8

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.

    
Bill the Lizard 24.03.2009, 23:51
quelle

6 Antworten

5

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

?     
1800 INFORMATION 25.03.2009 00:14
quelle
3

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.

    
John Rasch 25.03.2009 00:15
quelle
1

um die Regel des Bruders für X zu optimieren, ist kein Bruder für sich selbst.

Sie sollten tun:

%Vor%     
Trabzonlu Kaplan 20.04.2009 20:52
quelle
1

Sie haben eine starke Datenbank mit Fakten und einem sehr wichtigen Prädikat namens parent(X,Y) . Denken Sie logisch über den Ansatz nach.

  • Wer ist ein Bruder / eine Schwester:
    a) Ein Mann / Frau, also male(X) oder female(X) muss innerhalb des Prädikats
    sein b) X und Y haben dasselbe, aber seien Sie vorsichtig, entweder mother oder father function zu verwenden, da sonst das Ergebnis zweimal angezeigt wird.
    PS: stelle sicher, dass X/=Y . =)

Beispiel:
brother(X,Y):- X/=Y, male(X), father(Father,X), father(Father,Y).

  • Wer ist Onkel / Tante (ein bisschen schwierig, aber nicht viel):
    a) Ist männlich / weiblich b) Tante / Onkel ist Schwester / Bruder der Mutter oder des Vaters des Geschwisters.

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;)

    
andru6a 11.10.2013 07:39
quelle
1

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%     
Forcetti 10.05.2016 16:33
quelle
0

zuerst:

setzen Sie Ihre Fakten auf den Anfang Ihres Codes!

und für Bruder:

%Vor%     
Mehrdad 05.06.2017 12:41
quelle

Tags und Links