20.03.2014 Aufrufe

Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...

Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...

Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

5.3 Implementierung logischer Programmiersprachen: Prolog<br />

member(X,[X|_]) :-!.<br />

member(X,[_|Y]) :- member(X,Y).<br />

Wenn <strong>die</strong> erste Klausel erfolgreich war, muss <strong>die</strong> zweite nicht mehr betrachtet werden.<br />

Beachte: Die alte Version liefert bei Anfrage ?- member(X,[1,2,3]). drei verschiedene Lösungen<br />

X = 1 ; X = 2 ; X = 3. Die Version mit Cut liefert nur e<strong>in</strong>e X = 1.<br />

Beispiel 5.3.9. E<strong>in</strong> if-then-else ist eigentlich nicht darstellbar <strong>in</strong> purem Prolog. Mit dem Cut-<br />

Operator kann <strong>die</strong>s jedoch programmiert werden als<br />

ifthenelse(B,P,Q) :- B,!,P.<br />

ifthenelse(B,P,Q) :- Q.<br />

Beispiel 5.3.10. Das folgende Beispiel soll nochmal verdeutlichen, dass <strong>der</strong> Cut-Operator semantikverän<strong>der</strong>nd<br />

ist. Betrachte das Programm<br />

p :- a,b.<br />

p :-c.<br />

Die logische Bedeutung ist (a ∧ b =⇒ p) ∧ (c =⇒ p). Drehen wir <strong>die</strong> Reihenfolge <strong>der</strong><br />

Programmklauseln um, so än<strong>der</strong>t sich an <strong>der</strong> Bedeutung nichts. Betrachten wir nun <strong>die</strong> Variante<br />

mit cut:<br />

p :- a,!,b.<br />

p :-c.<br />

Die logische Bedeutung ist nun (a ∧ b =⇒ p) ∧ (¬a ∧ c =⇒ p), da <strong>die</strong> zweite Klausel nur bei<br />

¬a betrachtet wird.<br />

Umdrehen <strong>der</strong> Klauseln ergibt:<br />

p :-c.<br />

p :- a,!,b.<br />

Die logische Bedeutung ist nun an<strong>der</strong>s: (c =⇒ p) ∧ (a ∧ b =⇒ p).<br />

5.3.7 Negation: Die Closed World-Annahme<br />

In Prolog kann man <strong>in</strong> Programmklauseln ke<strong>in</strong>e Negation verwenden, da <strong>die</strong> Programmklausel<br />

A ⇐ ¬B <strong>der</strong> Klausel {A, B} entspräche, <strong>die</strong> ke<strong>in</strong>e def<strong>in</strong>ite Klausel mehr ist, da<br />

sie zwei positive Literale enthält. Trotzallem gibt es <strong>in</strong> Prolog e<strong>in</strong>en not-Operator. Dessen<br />

Semantik ist jedoch nicht <strong>die</strong> logische Negation, son<strong>der</strong>n wird als Fehlschlagen <strong>der</strong><br />

Suche <strong>in</strong>terpretiert. Wir betrachten als Beispiel <strong>die</strong> Aussage: Maria mag alle Tiere außer<br />

Schlangen. Den ersten Teil <strong>der</strong> Aussage können wir durch<br />

M. Schmidt-Schauß & D. Sabel, Skript KI, WS 2012/13 179 Stand: 7. Januar 2013

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!