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 ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
5 Logisches Programmieren<br />
E<strong>in</strong>e mögliche Abhilfe ist das E<strong>in</strong>führen e<strong>in</strong>es zusätzlichen Parameters, <strong>der</strong> als Tiefenschranke<br />
verwendet wird (beachte den Abschnitt 5.3.3 zu Zahlen und arithmetischen Operationen).<br />
p(I,a,b).<br />
p(I,c,b).<br />
p(I,X,Y) :- I > 0, J is I-1, p(J,Y,X).<br />
p(I,X,Z) :- I > 0, J is I-1, p(J,X,Y) , p(J,Y,Z).<br />
Ruft man p(2,a,c) auf so erhält man true. I stellt hier gerade <strong>die</strong> Tiefenschranke dar.<br />
E<strong>in</strong>e weitere Verän<strong>der</strong>ung gegenüber <strong>der</strong> Logik ist, dass <strong>in</strong> Prologimplementierungen<br />
<strong>der</strong> Occurs Check während <strong>der</strong> Unifikation aus Effizienzgründen nicht durchgeführt<br />
wird. Da es <strong>in</strong> <strong>die</strong>sem Fall quasi e<strong>in</strong>e Lösung als unendlichen Term gibt (<strong>der</strong> natürlich<br />
ke<strong>in</strong> P L 1 -Term ist), wird e<strong>in</strong>fach weitergerechnet. Das ist aus Sicht <strong>der</strong> Prädikatenlogik<br />
falsch. Aus Prolog-Sicht muss sich <strong>der</strong> Programmierer darüber bewusst se<strong>in</strong>.<br />
Gibt man z.B.<br />
k(X,X)=k(Y,h(Y)).<br />
im Prolog-Interpreter e<strong>in</strong> (beachte = steht für Gleichheit bzgl. <strong>der</strong> Terme), so erhält man<br />
e<strong>in</strong>e Lösung:<br />
X = Y, Y = h(Y).<br />
Die Unifikation mit Occurs Check verbietet <strong>die</strong>se Lösung, da Y = h(Y ) bedeutet, dass Y<br />
e<strong>in</strong> unendlicher Term ist.<br />
Weitere Verän<strong>der</strong>ungen <strong>in</strong> Prolog gegenüber <strong>der</strong> theoretischen Fun<strong>die</strong>rung s<strong>in</strong>d:<br />
• Es gibt extra Operatoren zum Bee<strong>in</strong>flussen des Backtrack<strong>in</strong>g (Cut), <strong>der</strong> u.a. bewirken<br />
kann, dass für e<strong>in</strong> Unterziel statt vielen Lösungen maximal e<strong>in</strong>e berechnet wird.<br />
Dies werden wir unten noch genauer behandeln.<br />
• Assert/Retract: Damit können Programmklauseln zum Programm h<strong>in</strong>zugefügt<br />
bzw. gelöscht werden. I.a, betrifft <strong>die</strong>s nur Fakten.<br />
• Negation: Negation wird def<strong>in</strong>iert als Fehlschlagen <strong>der</strong> Suche.<br />
• Es wird z.T. Typ<strong>in</strong>formation zu Programmen h<strong>in</strong>zugefügt.<br />
• Argumente von Prädikaten kann man mit dem Zusatz I bzw. O versehen. Diese Angaben<br />
bedeuten, dass das jeweilige Argument nur als E<strong>in</strong>gabe bzw. nur als Ausgabe<br />
verwendet wird.<br />
• Zusätzlich kann man e<strong>in</strong> Prädikat als Funktion def<strong>in</strong>ieren, wenn <strong>die</strong> ersten Argumente<br />
<strong>die</strong> E<strong>in</strong>gabe s<strong>in</strong>d, das letzte Argument <strong>die</strong> Ausgabe, wobei <strong>die</strong> Funktion noch<br />
zusätzlich als determ<strong>in</strong>istisch (d.h. als mathematische Funktion) deklariert werden<br />
muss.<br />
Stand: 7. Januar 2013 164 M. Schmidt-Schauß & D. Sabel, Skript KI, WS 2012/13