Top Banner
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
28

Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Oct 27, 2020

Download

Documents

dariahiddleston
Welcome message from author
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.
Transcript
Page 1: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

LEHRSTUHL PROGRAMMIERPARADIGMEN

Programmierparadigmen Tutorium 2 & 58. Tutorium am 10./11.12.2018Roman Langrehr | 10./11.12.2018

KIT – Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

www.kit.edu

Page 2: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Gleichheit in Prolog= bzw. \=: Unifizierbarkeit

X = Y gilt für uninstantiierte Variablen X, YX und Y sind dannach die selbe Variable.

== bzw. \==: Gleichheit der TermeX == Y gilt nicht für uninstantiierte Variablen X, YVerändert die Terme nicht: X \== Y, X = 5, Y = 5. isterfüllbar.

Ist not(not(X = Y)) äquivalent zu X = Y?Ist not(not(X == Y)) äquivalent zu X == Y?

not(not(X = Y)) ist nicht äquivalent zu X = Y.not(not(X = Y)) stellt nicht sicher, dass X und Y dannach dieselbe Variable sind.Beispiel:

not(not(X = Y)),X = 5 setzt X auf 5.X = Y,X = 5 setzt X und Y auf 5.

not(not(X == Y)) ist äquivalent zu X == Y.Die Prüfung X == Y verändert die Variablen nicht.

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 2

Page 3: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Gleichheit in Prolog= bzw. \=: Unifizierbarkeit

X = Y gilt für uninstantiierte Variablen X, YX und Y sind dannach die selbe Variable.

== bzw. \==: Gleichheit der TermeX == Y gilt nicht für uninstantiierte Variablen X, YVerändert die Terme nicht: X \== Y, X = 5, Y = 5. isterfüllbar.

Ist not(not(X = Y)) äquivalent zu X = Y?Ist not(not(X == Y)) äquivalent zu X == Y?

not(not(X = Y)) ist nicht äquivalent zu X = Y.not(not(X = Y)) stellt nicht sicher, dass X und Y dannach dieselbe Variable sind.Beispiel:

not(not(X = Y)),X = 5 setzt X auf 5.X = Y,X = 5 setzt X und Y auf 5.

not(not(X == Y)) ist äquivalent zu X == Y.Die Prüfung X == Y verändert die Variablen nicht.

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 2

Page 4: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Gleichheit in Prolog= bzw. \=: Unifizierbarkeit

X = Y gilt für uninstantiierte Variablen X, YX und Y sind dannach die selbe Variable.

== bzw. \==: Gleichheit der TermeX == Y gilt nicht für uninstantiierte Variablen X, YVerändert die Terme nicht: X \== Y, X = 5, Y = 5. isterfüllbar.

Ist not(not(X = Y)) äquivalent zu X = Y?Ist not(not(X == Y)) äquivalent zu X == Y?

not(not(X = Y)) ist nicht äquivalent zu X = Y.not(not(X = Y)) stellt nicht sicher, dass X und Y dannach dieselbe Variable sind.Beispiel:

not(not(X = Y)),X = 5 setzt X auf 5.X = Y,X = 5 setzt X und Y auf 5.

not(not(X == Y)) ist äquivalent zu X == Y.Die Prüfung X == Y verändert die Variablen nicht.

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 2

Page 5: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Gleichheit in Prolog= bzw. \=: Unifizierbarkeit

X = Y gilt für uninstantiierte Variablen X, YX und Y sind dannach die selbe Variable.

== bzw. \==: Gleichheit der TermeX == Y gilt nicht für uninstantiierte Variablen X, YVerändert die Terme nicht: X \== Y, X = 5, Y = 5. isterfüllbar.

Ist not(not(X = Y)) äquivalent zu X = Y?Ist not(not(X == Y)) äquivalent zu X == Y?

not(not(X = Y)) ist nicht äquivalent zu X = Y.not(not(X = Y)) stellt nicht sicher, dass X und Y dannach dieselbe Variable sind.Beispiel:

not(not(X = Y)),X = 5 setzt X auf 5.X = Y,X = 5 setzt X und Y auf 5.

not(not(X == Y)) ist äquivalent zu X == Y.Die Prüfung X == Y verändert die Variablen nicht.

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 2

Page 6: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Gleichheit in Prolog= bzw. \=: Unifizierbarkeit

X = Y gilt für uninstantiierte Variablen X, YX und Y sind dannach die selbe Variable.

== bzw. \==: Gleichheit der TermeX == Y gilt nicht für uninstantiierte Variablen X, YVerändert die Terme nicht: X \== Y, X = 5, Y = 5. isterfüllbar.

Ist not(not(X = Y)) äquivalent zu X = Y?Ist not(not(X == Y)) äquivalent zu X == Y?

not(not(X = Y)) ist nicht äquivalent zu X = Y.not(not(X = Y)) stellt nicht sicher, dass X und Y dannach dieselbe Variable sind.Beispiel:

not(not(X = Y)),X = 5 setzt X auf 5.X = Y,X = 5 setzt X und Y auf 5.

not(not(X == Y)) ist äquivalent zu X == Y.Die Prüfung X == Y verändert die Variablen nicht.

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 2

Page 7: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

4-Färbbarkeit

farbe(blau).farbe(gelb).farbe(gruen).farbe(rot).

nachbar(X, Y) :- farbe(X), farbe(Y), X \= Y.

deutschland(VW02,VW03,VW04,VW05,VW06,VW07,VW08,VW09):- nachbar(VW04, VW05), nachbar(VW04, VW03), ...

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 3

Page 8: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Prolog Listen

[] – Leere Listen[X|XS] – Liste mit Listenkopf X und Restliste XS

Kurzschreibweise: [1,2,3]

Wichtige Funktionen:

member(X,[X|R]).member(X,[Y|R]) :- member(X,R).

append([],L,L).append([X|R],L,[X|T]) :- append(R,L,T).

reverse(X,Y) :- rev1(X,[],Y).rev1([],Y,Y).rev1([X|R],A,Y) :- rev1(R,[X|A],Y).

permutation([],[]).permutation([X|R],P) :- permutation(R,P1),

append(A,B,P1),append(A,[X|B],P).

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 4

Page 9: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Prolog Listen

[] – Leere Listen[X|XS] – Liste mit Listenkopf X und Restliste XS

Kurzschreibweise: [1,2,3]

Wichtige Funktionen:

member(X,[X|R]).member(X,[Y|R]) :- member(X,R).

append([],L,L).append([X|R],L,[X|T]) :- append(R,L,T).

reverse(X,Y) :- rev1(X,[],Y).rev1([],Y,Y).rev1([X|R],A,Y) :- rev1(R,[X|A],Y).

permutation([],[]).permutation([X|R],P) :- permutation(R,P1),

append(A,B,P1),append(A,[X|B],P).

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 4

Page 10: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Reguläre Ausdrücke

matches(epsilon,[]).

matches(C,[C]) :- atom(C), C \= epsilon.

matches(union(A,_),S) :- matches(A,S).matches(union(_,B),S) :- matches(B,S).

matches( ·(A,B),S) :- append(S1,S2,S), matches(A,S1),matches(B,S2).

matches(*(_),[]).matches(*(A),S) :- append(S1,S2,S), not(S1=[]),

matches(A,S1), matches(*(A),S2).

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 5

Page 11: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Wolf, Ziege, Kohl

gegenueber(links,rechts).gegenueber(rechts,links).

harmlos(_,X,Y) :- gegenueber(X,Y).harmlos(Ufer,Ufer,Ufer).

erlaubt((Mann,Ziege,Wolf,Kohl)) :-harmlos(Mann,Ziege,Wolf),harmlos(Mann,Ziege,Kohl).

fahrt((U,U,Wolf,Kohl), ’Ziege’, (UNeu,UNeu,Wolf,Kohl)):- gegenueber(U,UNeu).

fahrt((U,Ziege,U,Kohl), ’Wolf’, (UNeu,Ziege,UNeu,Kohl)):- gegenueber(U,UNeu).

fahrt((U,Ziege,Wolf,U), ’Kohl’, (UNeu,Ziege,Wolf,UNeu)):- gegenueber(U,UNeu).

fahrt((U,Ziege,Wolf,Kohl), ’leer’, (UNeu,Ziege,Wolf,Kohl)):- gegenueber(U,UNeu).

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 6

Page 12: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Wolf, Ziege, Kohl

erreichbar(S,_,[],S).erreichbar(S,Besucht,[Fahrt|Fahrten],Z) :-

fahrt(S,Fahrt,ZwischenS), erlaubt(ZwischenS),not(member(ZwischenS,Besucht)),erreichbar(ZwischenS,[ZwischenS|Besucht]Fahrten,Z).

lösung(Fahrten) :- start(S), ziel(Z),erreichbar(S,[],Fahrten,Z).

start((links,links,links,links)).ziel((rechts,rechts,rechts,rechts)).

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 7

Page 13: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Arithmetik in PrologArithmetische Funktionen sind wie Funktoren aber

werten zu einer Zahl auskönnen in Infix-Notation geschrieben werden

Vorsicht! Arithmetik in Prolog ist gewöhnungsbedürftig.

test(5).

?test(2+3) liefert false.(2+3) wird nicht automatisch ausgewertet.

is wertet rechtes Argument (arithmetischer Ausdruck) aus und vergleichtes mit dem linken.

Im rechten Term müssen alle Variablen instantiiert sein.

test(X) :- 5 is X.

?test(2+3) liefert true.

test(X) :- X is 5.

?test(2+3) liefert false.

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 8

Page 14: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Arithmetik in PrologArithmetische Funktionen sind wie Funktoren aber

werten zu einer Zahl auskönnen in Infix-Notation geschrieben werden

Vorsicht! Arithmetik in Prolog ist gewöhnungsbedürftig.

test(5).

?test(2+3) liefert false.(2+3) wird nicht automatisch ausgewertet.

is wertet rechtes Argument (arithmetischer Ausdruck) aus und vergleichtes mit dem linken.

Im rechten Term müssen alle Variablen instantiiert sein.

test(X) :- 5 is X.

?test(2+3) liefert true.

test(X) :- X is 5.

?test(2+3) liefert false.

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 8

Page 15: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Arithmetik in PrologArithmetische Funktionen sind wie Funktoren aber

werten zu einer Zahl auskönnen in Infix-Notation geschrieben werden

Vorsicht! Arithmetik in Prolog ist gewöhnungsbedürftig.

test(5).

?test(2+3) liefert false.(2+3) wird nicht automatisch ausgewertet.

is wertet rechtes Argument (arithmetischer Ausdruck) aus und vergleichtes mit dem linken.

Im rechten Term müssen alle Variablen instantiiert sein.

test(X) :- 5 is X.

?test(2+3) liefert true.

test(X) :- X is 5.

?test(2+3) liefert false.

Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 8

Page 16: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

Arithmetik in PrologArithmetische Funktionen sind wie Funktoren aber

werten zu einer Zahl auskönnen in Infix-Notation geschrieben werden

Vorsicht! Arithmetik in Prolog ist gewöhnungsbedürftig.

test(5).

?test(2+3) liefert false.(2+3) wird nicht automatisch ausgewertet.

is wertet rechtes Argument (arithmetischer Ausdruck) aus und vergleichtes mit dem linken.

Im rechten Term müssen alle Variablen instantiiert sein.

test(X) :- 5 is X.

?test(2+3) liefert true.

test(X) :- X is 5.

?test(2+3) liefert false.Roman Langrehr – Programmierparadigmen Tutorium 2 & 5 10./11.12.2018 8

Page 17: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 18: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 19: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 20: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 21: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 22: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 23: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 24: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 25: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 26: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 27: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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

Page 28: Programmierparadigmen Tutorium 2 & 5 - 8. Tutorium am 10 ...kit.romanlangrehr.bplaced.de/propa1819/Folien08.pdf · LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 2

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