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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

5.4 Sprachverarbeitung und Parsen <strong>in</strong> Prolog<br />

s --> [a,b].<br />

s --> [a], s, [b].<br />

D.h. anstelle von → wird --> benutzt, Term<strong>in</strong>ale werden <strong>in</strong> Listenklammern geschrieben<br />

und Folgen werden durch Kommata getrennt. Tatsächlich wird hier nur syntaktischer Zucker<br />

verwendet, d.h. Prolog übersetzt <strong>die</strong>se sogenannte Def<strong>in</strong>ite Clause Grammar (DCG)<br />

– <strong>die</strong> <strong>in</strong> <strong>die</strong>sem Fall auch e<strong>in</strong>e CFG ist – <strong>in</strong> Hornklauseln. Dabei werden <strong>die</strong> Nichtterm<strong>in</strong>ale<br />

<strong>in</strong> Prädikate übersetzt, <strong>die</strong> jedoch zwei weitere Argumente zur Verarbeitung <strong>der</strong> E<strong>in</strong>gabe<br />

erhalten. D.h. im Beispiel wird durch <strong>die</strong> DCG das zweistellige Prädikat s def<strong>in</strong>iert. Die<br />

Argumente stellen dabei gerade <strong>die</strong> E<strong>in</strong>gabeliste als Differenzliste dar (wobei e<strong>in</strong> Paar<br />

(L 1 , L 2 ) verwendet wird, und nicht <strong>die</strong> Darstellung L 1 − L 2 ). Wir betrachten zunächst<br />

e<strong>in</strong>ige Beispielaufrufe für unser Programm.<br />

?- s([a,a,b,b],[]).<br />

true.<br />

?- s([a,b,b,a],[]).<br />

false.<br />

?- s([a,a,a,b,b,b],[]).<br />

true.<br />

?- s([a,a,a,b,b,b|X],X).<br />

true .<br />

?- s([a,a,a,b,b,b,c,d],[c,d]).<br />

true.<br />

Die genaue Übersetzung ist: Sei <strong>die</strong> Produktion n --> n1,...,nm, wobei alle ni zunächst<br />

Nichtterm<strong>in</strong>ale seien. Dann wird für jede solche Produktion <strong>die</strong> Klausel<br />

n(E<strong>in</strong>gabe,Rest) :- n1(E<strong>in</strong>gabe,Rest1), n2(Rest1,Rest2),..., nm(Restm,Rest)<br />

erzeugt, d.h. <strong>die</strong> Differenzliste wird quasi sequentiell aufgeteilt: Jedes <strong>der</strong> Nichtterm<strong>in</strong>ale<br />

ni nimmt sich zur Verarbeitung gerade soviele Elemente aus <strong>der</strong> Liste wie es zur Verarbeitung<br />

benötigt.<br />

Die Übersetzung <strong>der</strong> Term<strong>in</strong>ale erfolgt dementsprechend: Man kann z.B. annehmen,<br />

dass e<strong>in</strong> Prädikat term<strong>in</strong>al zur Verarbeitung aller Term<strong>in</strong>ale h<strong>in</strong>zugefügt wird, mit <strong>der</strong><br />

Def<strong>in</strong>ition<br />

term<strong>in</strong>al(Term<strong>in</strong>ale,E<strong>in</strong>gabe,Rest) :- append(Term<strong>in</strong>ale,Rest,E<strong>in</strong>gabe).<br />

Wenn ni gerade <strong>die</strong> Liste [t1,...,tk] von Term<strong>in</strong>alen ist, dann wird ni ersetzt durch<br />

term<strong>in</strong>al([t1,....,tk],RestI −1,RestI) Man kann auch auf <strong>die</strong> Verwendung des Prädikats<br />

term<strong>in</strong>al verzichten und <strong>die</strong> Bed<strong>in</strong>gungen direkt ko<strong>die</strong>ren.<br />

Kehren wir zurück zur Beispielgrammatik und übersetzen <strong>die</strong>se nach obiger Anleitung<br />

<strong>in</strong> Prolog-Hornklauseln:<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!