PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Pascal, Basic und andere nicht aufgelistete
Antworten
smirk_mirkin
Beiträge: 2
Registriert: So Jul 27, 2014 3:04 pm

PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Beitrag von smirk_mirkin » So Jul 27, 2014 3:13 pm

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Beitrag von Xin » So Jul 27, 2014 7:58 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

smirk_mirkin
Beiträge: 2
Registriert: So Jul 27, 2014 3:04 pm

Re: PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Beitrag von smirk_mirkin » Mo Jul 28, 2014 3:40 pm

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?

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Beitrag von oenone » Mo Jul 28, 2014 3:43 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: PROLOG: Erste Quelltextzeile wird komisch interpretiert.

Beitrag von Xin » Mo Jul 28, 2014 4:13 pm

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten