Seite 1 von 1

PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Verfasst: So Jul 27, 2014 3:13 pm
von smirk_mirkin
Hallo Progger,

ich benutze GNU Prolog und lade eine ganz einfache database:

Code: Alles auswählen

% Facts
vater(dietmar,mirko).
vater(dietmar,anja).
mutter(grit,mirko).
mutter(grit,anja).

% Rules
% I know that geschwister is not complete yet.
geschwister(X,Y) :- vater(Z,X), vater(Z,Y), X\=Y.
Wenn ich nun eingebe

Code: Alles auswählen

?- vater(dietmar,mirko).
antwortet der Interpreter mit

Code: Alles auswählen

true ?
Wenn ich die anderen facts abfrage, dann kommt ganz normal "yes".
Wenn ich die Position der facts tausche, funktioniert es wieder mit dem neuen obersten fact nicht.
Kann mir jemand sagen woran das liegt?

Re: PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Verfasst: So Jul 27, 2014 7:58 pm
von Xin
smirk_mirkin hat geschrieben:Wenn ich die anderen facts abfrage, dann kommt ganz normal "yes".
Wenn ich die Position der facts tausche, funktioniert es wieder mit dem neuen obersten fact nicht.
Kann mir jemand sagen woran das liegt?
Prolog ist bei mir 10 Jahre her... ^^

Wenn ich mich recht erinnere, geht Prolog ja die Fakten durch. Mit vater(dietmar,mirko) hat Prolog ja ein passendes Fakt gefunden (true), aber noch keine abschließende Antwort. Es gibt aber noch ein weiteres Fakt für vater. Daher zeigt es "true" und ein Prompt, dass Du weiter untersuchen kannst: (n)ext oder bist mit der Antwort zufrieden bist: (b)reak.

Das gleiche hast Du ja auch bei mutter(grit, mirko).

Das ganze macht mehr Sinn, wenn Du eine Abfrage wie vater(dietmar, X) stellst. X ist gültig für mirko, aber es gibt weitere Fakten zum Thema vater, X ist auch gültig für anja.

Re: PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Verfasst: Mo Jul 28, 2014 3:40 pm
von smirk_mirkin
Stimmt, hab gerade probiert und bei "mutter(grit,mirko)." fragt er auch "true?" und wenn man auf next geht kommt das "no".
Also ist "vater(dietmar,mirko)." sowohl wahr als auch falsch?
Ich dachte immer die Fakten gelten, wieso können die dann wahr oder falsch sein?
Bzw. was drückt ein fact aus, wenn nicht, dass er richtig ist?

Re: PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Verfasst: Mo Jul 28, 2014 3:43 pm
von oenone
Nein, es ist wahr, du bekommst ja ein true (entspricht "ein Ergebnis gefunden. Weitersuchen?"). Wenn du Prolog anweist, weiter zu suchen oder Backtracking zu nutzen (bei 'n' oder 'a'), dann werden die weiteren Ergebnisse gesucht. Es gibt aber nur eins, deshalb kommt dann false (entspricht "keine weiteren Ergebnisse").

Du kannst natürlich einen "cut" einsetzen ("!"). Dann wird nach dem ersten Ergebnis aufgehört:

Code: Alles auswählen

?- vater(dietmar,mirko), !.
true.

Re: PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Verfasst: Mo Jul 28, 2014 4:13 pm
von Xin
Stimmt, der "Cut" ist mir gar nicht mehr eingefallen... ich musste erstmal überhaupt gucken, wie man die Datei überhaupt lädt :-D

Lange her. ^^

smirk_mirkin: Gymnasium oder Informatik-Student?