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 />

mitteilung(X,normal) :- X < 4,!.<br />

mitteilung(X,w<strong>in</strong>dig) :- X < 8,!.<br />

mitteilung(X,stuermisch).<br />

Beachte: Diese Implementierung sollte man nicht mit direkten Werten für <strong>die</strong> Ausgabe<br />

aufrufen. Da z.B ?- mitteilung(3,w<strong>in</strong>dig) wahr wird. Im Gegensatz dazu ergibt<br />

?- mitteilung(3,Y), Y=w<strong>in</strong>dig. falsch.<br />

Es stimmt nun auch nicht mehr: Das Programm verhält sich mit Cuts genauso wie ohne<br />

Cuts. Denn: Wenn wir <strong>die</strong> Cuts weglassen, erhalten wir<br />

mitteilung(X,normal) :- X < 4.<br />

mitteilung(X,w<strong>in</strong>dig) :- X < 8.<br />

mitteilung(X,stuermisch).<br />

Nun ergibt <strong>die</strong> Anfrage ?- mitteilung(3,Y), Y=w<strong>in</strong>dig. als Ergebnis true!.<br />

Das Beispiel demonstriert, dass das Hantieren mit Cuts zu semantischen Problemen<br />

führt, d.h. <strong>die</strong> Bedeutung <strong>der</strong> Programme kann sich än<strong>der</strong>n. E<strong>in</strong>e gute Programmierregel<br />

ist es, Cuts nur dann e<strong>in</strong>zusetzen, wenn das Weglassen <strong>der</strong> Cuts <strong>die</strong> logische Bedeutung<br />

nicht än<strong>der</strong>t, da ansonsten <strong>die</strong> Verständlichkeit und Wartbarkeit <strong>der</strong> Programme schwieriger<br />

wird.<br />

Wir betrachten e<strong>in</strong>ige Beispiele zur Programmierung mit Cut:<br />

Beispiel 5.3.7. Die Berechnung des Maximums zweier Zahlen kann wiefolgt <strong>in</strong> Prolog implementiert<br />

werden:<br />

max(X,Y,X) :- X >= Y.<br />

max(X,Y,Y) :- Y < X.<br />

Mit Cut kann man <strong>die</strong>s umschreiben zu:<br />

max(X,Y,X) :- X >= Y,!.<br />

max(X,Y,Y).<br />

Allerd<strong>in</strong>gs sollte man <strong>die</strong>ses Prädikat nicht direkt mit dem Ergebniswert aufrufen, denn z.B.<br />

?- max(3,1,1). ergibt wahr. Man sollte es daher <strong>in</strong> <strong>der</strong> Form ?- max(3,1,Z), Z=3. verwenden.<br />

Beispiel 5.3.8. Wir haben bereits den Enthaltentest e<strong>in</strong>es Elements <strong>in</strong> e<strong>in</strong>er Liste programmiert:<br />

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

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

member(X,Y).<br />

Mit Cut können wir <strong>die</strong>s effizienter programmieren als:<br />

Stand: 7. Januar 2013 178 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!