LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2 & 5 8. Tutorium am 10./11.12.2018 Roman Langrehr | 10./11.12.2018 KIT – Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
=:= bzw. =\=: Arithmetische GleichheitBeide Seiten müssen vollständig instantiiert sein.
Tipp: is für Zuweisungen verwenden, =:= bzw. =\= für Überprüfungen.Analog funktionieren <, =<, > und >=.
Beispiel
powerof2(X) :- X =:= 1.powerof2(X) :- X > 1, 0 =:= X mod 2, Y is X div 2,
powerof2(Y).
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 9
Arithmetik in Prolog
=:= bzw. =\=: Arithmetische GleichheitBeide Seiten müssen vollständig instantiiert sein.
Tipp: is für Zuweisungen verwenden, =:= bzw. =\= für Überprüfungen.
Analog funktionieren <, =<, > und >=.
Beispiel
powerof2(X) :- X =:= 1.powerof2(X) :- X > 1, 0 =:= X mod 2, Y is X div 2,
powerof2(Y).
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 9
Arithmetik in Prolog
=:= bzw. =\=: Arithmetische GleichheitBeide Seiten müssen vollständig instantiiert sein.
Tipp: is für Zuweisungen verwenden, =:= bzw. =\= für Überprüfungen.Analog funktionieren <, =<, > und >=.
Beispiel
powerof2(X) :- X =:= 1.powerof2(X) :- X > 1, 0 =:= X mod 2, Y is X div 2,
powerof2(Y).
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 9
Arithmetik in Prolog
=:= bzw. =\=: Arithmetische GleichheitBeide Seiten müssen vollständig instantiiert sein.
Tipp: is für Zuweisungen verwenden, =:= bzw. =\= für Überprüfungen.Analog funktionieren <, =<, > und >=.
Beispiel
powerof2(X) :- X =:= 1.powerof2(X) :- X > 1, 0 =:= X mod 2, Y is X div 2,
powerof2(Y).
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 9
Cut
Spezielles Prädikat: !
Wertet zu wahr aus.
Bei jedem Reerfüllungsversuch wertet es zu falsch aus.
Diese Reerfüllungsversuch werden nicht durchgeführt.
Wurde ein Cut erreicht, wird keine weitere Regel für das aktuellePrädikat getestet.
Implementierung: Choicepoints löschen
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 10
Cut
Spezielles Prädikat: !
Wertet zu wahr aus.Bei jedem Reerfüllungsversuch wertet es zu falsch aus.
Diese Reerfüllungsversuch werden nicht durchgeführt.
Wurde ein Cut erreicht, wird keine weitere Regel für das aktuellePrädikat getestet.
Implementierung: Choicepoints löschen
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 10
Cut
Spezielles Prädikat: !
Wertet zu wahr aus.Bei jedem Reerfüllungsversuch wertet es zu falsch aus.
Diese Reerfüllungsversuch werden nicht durchgeführt.
Wurde ein Cut erreicht, wird keine weitere Regel für das aktuellePrädikat getestet.
Implementierung: Choicepoints löschen
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 10
Cut
Spezielles Prädikat: !
Wertet zu wahr aus.Bei jedem Reerfüllungsversuch wertet es zu falsch aus.
Diese Reerfüllungsversuch werden nicht durchgeführt.
Wurde ein Cut erreicht, wird keine weitere Regel für das aktuellePrädikat getestet.
Implementierung: Choicepoints löschen
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 10
Cut
Spezielles Prädikat: !
Wertet zu wahr aus.Bei jedem Reerfüllungsversuch wertet es zu falsch aus.
Diese Reerfüllungsversuch werden nicht durchgeführt.
Wurde ein Cut erreicht, wird keine weitere Regel für das aktuellePrädikat getestet.
Implementierung: Choicepoints löschen
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 10
not
Beispielimplementierung:
not(P) :- call(P), !, fail.not(P).
call(P) überprüft, ob P zu wahr auswertet.
fail ist ein unerfüllbares Prädikat.
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 11
Missionare und Kannibalen
Nachdem Wolf, Ziege und Kohl den Fluss unbeschadet überquert haben,sollen nun n Missionare und n Kannibalen den Fluss überqueren. Dabeigilt:
In dem Boot ist nach wie vor nur Platz für 2 Personen
Sowohl Missionare als auch Kannibalen können das Boot steuern,das Boot steuert sich aber nicht von alleine.
Sind zu einem Zeitpunkt auf einer Uferseite mehr Kannibalen alsMissionare, werden die Missionare (falls vorhanden) von denKannibalen gefressen. Das gilt es zu vermeiden.
Schreibe ein Prolog-Prädikat, das alle Lösungen des Problems (ohneZustandswiederholungen) berechnet.
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 12
Türme von Hanoi
Es gibt 3 Stapel.
Zu Beginn enthält der Linke die Zahlen [1, . . . , n] der Mittlere und derRechte sind leer.
In einem Zug darf man von einem Stapel das oberste Element aufeinen anderen Stapel verschieben.
Alle Stapel müssen zu jedem Zeitpunkt sortiert sein.
Schreibe ein Prolog-Prädikat, das alle Lösungen des Problems (ohneZustandswiederholungen) berechnet.
Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 13