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 ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
5 Logisches Programmieren<br />
• Bei Ausführung e<strong>in</strong>es SLD-Resolutionsschritts wird <strong>der</strong> Rumpf an <strong>die</strong> Stelle des Unterziels<br />
gesetzt, und zwar <strong>in</strong> <strong>der</strong> Reihenfolge <strong>der</strong> Literale <strong>in</strong> <strong>der</strong> Programmklausel.<br />
D.h. Prolog benutzt <strong>die</strong> Tiefensuche, wobei <strong>die</strong> Rechts-L<strong>in</strong>ks-Ordnung durch <strong>die</strong> Reihenfolge<br />
<strong>der</strong> Klauseln im Programm und <strong>die</strong> Reihenfolge <strong>der</strong> Literale <strong>in</strong> den Rümpfen def<strong>in</strong>iert<br />
wird.<br />
Beachte, dass <strong>der</strong> Stack von Literalen <strong>die</strong> Selektionsfunktion festlegt, und daher nicht <strong>die</strong><br />
Vollständigkeit des Verfahrens än<strong>der</strong>t. Die Reihenfolge <strong>der</strong> Programmklauseln zu verwenden<br />
entspricht jedoch gerade <strong>der</strong> Tiefensuche, <strong>die</strong> – wie wir bereits gesehen haben – unvollständig<br />
ist. Der Grund hierfür ist praktischer Natur: Zum e<strong>in</strong>en kann <strong>die</strong> Tiefensuche <strong>in</strong><br />
vielen Fällen schneller se<strong>in</strong>, als <strong>die</strong> Breitensuche, und zum an<strong>der</strong>en verbraucht sie bekanntlich<br />
viel weniger Platz.<br />
Aus Sicht <strong>der</strong> Prologgeme<strong>in</strong>de ist daher <strong>der</strong> Programmierer dafür verantwortlich <strong>die</strong><br />
Programmklauseln entsprechend <strong>in</strong> e<strong>in</strong>er Reihenfolge anzuordnen, so dass <strong>die</strong> Nichtterm<strong>in</strong>ierung<br />
nicht e<strong>in</strong>tritt. Im Grunde wi<strong>der</strong>spricht <strong>die</strong>s dem großen Ziel <strong>der</strong> deklarativen<br />
Programmierung, welches for<strong>der</strong>t, dass im Programm nur zu spezifizieren ist, was berechnet<br />
werden soll, aber nicht genau wie. Um Nichtterm<strong>in</strong>ierung zu vermeiden, muss <strong>der</strong><br />
Prolog-Programmierer jedoch <strong>die</strong> H<strong>in</strong>tergründe kennen und durch Anordnung <strong>der</strong> Programmklauseln<br />
auch zum Teil das Wie spezifizieren.<br />
5.3.1 Syntaxkonventionen von Prolog<br />
Namen können aus Großbuchstaben, Kle<strong>in</strong>buchstaben, Ziffern und _ (Unterstrich) gebildet<br />
werden, o<strong>der</strong> nur aus Son<strong>der</strong>zeichen.<br />
Konstanten s<strong>in</strong>d Namen, <strong>die</strong> mit Kle<strong>in</strong>buchstaben beg<strong>in</strong>nen;<br />
Variablen s<strong>in</strong>d Namen, <strong>die</strong> mit Großbuchstaben o<strong>der</strong> mit e<strong>in</strong>em Unterstrich _ beg<strong>in</strong>nen.<br />
Der Unterstrich alle<strong>in</strong>e _ ist <strong>der</strong> Name e<strong>in</strong>er anonymen Variablen (wildcard, joker, Leerstelle).<br />
Zusammengesetzte Terme (komplexe Terme) haben <strong>die</strong> Form<br />
F unctor(component 1 , . . . , component n )<br />
Die Stelligkeit des Funktors ist nicht variabel. Verwendet man den gleichen Namen mit<br />
verschiedener Stelligkeit, so werden <strong>die</strong>se Vorkommen als verschiedene Objekte <strong>in</strong>terpretiert.<br />
Funktoren, <strong>die</strong> auf oberster Ebene stehen, nennt man auch Prädikate. Z.B.<br />
besitzt(peter, buch(lloyd, prolog)).<br />
5.3.2 Beispiele zu Prologs Tiefensuche<br />
Wir betrachten zunächst e<strong>in</strong> e<strong>in</strong>faches Beispiel, dass auf dem schon e<strong>in</strong>geführten Programm<br />
basiert.<br />
Stand: 7. Januar 2013 162 M. Schmidt-Schauß & D. Sabel, Skript KI, WS 2012/13