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 Logisches Programmieren<br />

usw. Man sieht: das term<strong>in</strong>iert nicht.<br />

Das kann man <strong>in</strong> Prolog auch testen (da e<strong>in</strong>e Tiefensuche verwendet wird). Wir verwenden<br />

zwei Varianten: member wie oben angegeben und member2, für <strong>die</strong> <strong>die</strong> beiden<br />

Programmklauseln vertauscht s<strong>in</strong>d:<br />

?- member2(X,[1,2,3]).<br />

X = 3 ;<br />

X = 2 ;<br />

X = 1.<br />

?- member(X,[1,2,3]).<br />

X = 1 ;<br />

X = 2 ;<br />

X = 3.<br />

?- member(Y,Y).<br />

Y = [**|_G460]<br />

?- member2(Y,Y).<br />

^C... term<strong>in</strong>iert nicht<br />

E<strong>in</strong> weiteres Prädikat ist islist, das versucht <strong>die</strong> Liste komplett auszuwerten. E<strong>in</strong> Möglichkeit<br />

wäre <strong>die</strong> Def<strong>in</strong>ition:<br />

islist([_|X]) :- islist(X).<br />

islist([]).<br />

Diese Def<strong>in</strong>ition term<strong>in</strong>iert es für Listen ohne Variablen, aber nicht für islist(X).<br />

Stellt man <strong>die</strong> Klauseln um, erhält man:<br />

islist([]).<br />

islist([_|X]) :- islist(X).<br />

Dieses Programm term<strong>in</strong>iert für <strong>die</strong> Anfrage islist(X).<br />

Als nächsten Beispiel programmieren wir <strong>die</strong> Berechnung <strong>der</strong> Länge e<strong>in</strong>er Liste, d.h.<br />

<strong>die</strong> Anzahl <strong>der</strong> Elemente <strong>die</strong> <strong>die</strong>se enthält. Beachte: Wir verwenden is, um <strong>die</strong> rekursive<br />

erhaltene Länge auszuwerten (vgl. Abschnitt zu arithmetischen Operationen).<br />

laenge([],0).<br />

laenge([_|X],N) :- laenge(X,N_1), N is N_1 + 1.<br />

Damit kann man folgende Beispiele rechnen:<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!