Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz...

36
Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz [email protected] Einführung in die Funktionsweise von Prolog

Transcript of Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz...

Page 1: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Prof. Dr. Herbert Göttler, Dr. Peter DauscherJohannes Gutenberg-Universität, [email protected]

Einführung in die Funktionsweisevon Prolog

Page 2: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Ein abstraktes Prolog-Programm

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Abfrage:

?- p(A,B).

Page 3: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Ein abstraktes Prolog-Programm

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Abfrage:

?- p(A,B). Wann ist das wahr?

Page 4: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Ein abstraktes Prolog-Programm

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

p(A├ ..., B├ ...)

Abfrage:

?- p(A,B).

Page 5: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(a,a).

p(A├ ..., B├ ...)

Abfrage:

?- p(A,B).

Page 6: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(a,a).

p(A├ ..., B├ ...)

p(a,a)

Abfrage:

?- p(A,B).

Page 7: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(a,a).

p(A├ ..., B├ ...)

p(a,a)

Abfrage:

?- p(A,B).

Page 8: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(a,a).

p(A├ a, B├ a)

p(a,a)

Abfrage:

?- p(A,B).

Page 9: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(a,a).

p(A├ a, B├ a)

p(a,a)

Abfrage:

?- p(A,B).

A=aB=a

Page 10: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(a,a).

p(A├ a, B├ a)

p(a,a)

Abfrage:

?- p(A,B).

A=aB=a ;

Page 11: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(A├ X1, B├ Y1)

p(a,a)

Abfrage:

?- p(A,B).

p(a,a). ;

q(X1├ ..., Z1├ ...) r(Z1├ ..., Y1├ ...),p(X,Y) :- q(X,Z), r(Z,Y).

Page 12: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(A├ X1, B├ Y1)

q(X1├ ..., Z1├ ...) r(Z1├ ..., Y1├ ...),q(a,b). p(a,a)

Abfrage:

?- p(A,B).

A=aB=a ;

Page 13: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(A├ X1, B├ Y1)

q(X1├ ..., Z1├ ...) r(Z1├ ..., Y1├ ...),q(a,b).

q(a,b)

p(a,a)

Abfrage:

?- p(A,B).

A=aB=a ;

Page 14: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(A├ X1, B├ Y1)

q(X1├ a, Z1├ b) r(Z1├ ..., Y1├ ...),q(a,b).

q(a,b)

p(a,a)

Abfrage:

?- p(A,B).

A=aB=a ;

Page 15: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(A├ X1, B├ Y1)

q(X1├ a, Z1├ b) r(Z1├ b, Y1├ ...),

r(a,b).

q(a,b)

p(a,a)

r(a,b)

Abfrage:

?- p(A,B).

A=aB=a ;

Page 16: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(A├ X1, B├ Y1)

q(X1├ a, Z1├ b) r(Z1├ b, Y1├ ...),

q(a,b)

p(a,a)

r (a,b)

r(a,b).

Abfrage:

?- p(A,B).

A=aB=a ;

Page 17: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(A├ X1, B├ Y1)

q(X1├ a, Z1├ b) r(Z1├ b, Y1├ ...),

q(a,b)

p(a,a)

r (b, d)

r(b,d).

Abfrage:

?- p(A,B).

A=aB=a ;

Page 18: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(A├ X1, B├ Y1)

q(X1├ a, Z1├ b) r(Z1├ b, Y1├ d),

q(a,b)

p(a,a)

r (b, d)

r(b,d).

Abfrage:

?- p(A,B).

A=aB=a ;

Page 19: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(A├ a, B├ d)

q(X1├ a, Z1├ b) r(Z1├ b, Y1├ d),

q(a,b)

p(a,a)

r (b, d)

r(b,d).

Abfrage:

?- p(A,B).

A=aB=a ;

Page 20: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

r(a,b).

r(b,d).

p(a,a).

p(X,Y) :- q(X,Z), r(Z,Y).

q(a,b).

Ein abstraktes Prolog-Programm

p(A├ a, B├ d)

q(X1├ a, Z1├ b) r(Z1├ b, Y1├ d),

q(a,b)

p(a,a)

r (b, d)

r(b,d).

Abfrage:

?- p(A,B).

A=aB=a ;

A=aB=d

Page 21: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Ähnlich

• f(X,2,Z) = f(1,Y,3).

• führt zur Systemantwort

X=1Z=3Y=2

Page 22: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Ähnlich

• f(X,2,Z) = f(1,Y,p(X)).

• führt zur Systemantwort

X=1Z=p(1)Y=2

Page 23: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Matching und Unifikation

• Man kann beim Mustervergleich (Matching) zwei Muster S und T nur unter folgenden Bedingungen zur Übereinstimmung bringen (Unifikation):

– Wenn S und T Konstante sind,dann müssen sie gleich sein

– Ist S irgendeine Variable und T irgendein Term, dann passen sie immer und S wird zu T „instanziiert“.

Page 24: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Matching und Unifikation

– Wenn S und T strukturierte Objekte, dann passen sie nur dann,

• wenn sie im sog. ersten Funktor übereinstimmen (hier das f )

• und der Rest wie vorangehend beschrieben korrespondiert

Die resultierende Instanziierung wird durch den Mustervergleich der Komponenten festgelegt, (im Beispiel u.a. das X)

Page 25: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Arithmetische Operatoren

+ Addition- Subtraktion* Multiplikation/ Division** Potenz// ganzzahlige Divisionmod modulo (Rest)

Page 26: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Vergleichsoperatoren

• X>Y numerisch: X größer Y• X<Y numerisch: X kleiner Y• X>=Y numerisch: X größer oder gleich Y• X=<Y numerisch: X größer oder gleich Y

(ACHTUNG!! Anders als in anderen Sprachen)

• X=:=Y die numerischen Werte sind gleich• X=\=Y die numerischen Werte sind ungleich

Page 27: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Wertzuweisung

• VORSICHT:

?- X=1+2.resultiert in Systemantwort:X=1+2

• Echtes Rechnen

?- X is 1+2.resultiert in SystemantwortX=3

Page 28: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Beispiel: Addiere 42

addfortytwo(X,Y):-

Y is X+42.

Page 29: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Beispiel: Maximum

maximum(X,Y,Max):-

X>=Y, Max is X.

maximum(X,Y,Max):-

X<Y, Max is Y.

Page 30: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Beispiel: Fakultät

fakultaet(0,1).

fakultaet(N,Fak) :-

N1 is N-1, fakultaet(N1,Fak1), Fak is N*Fak1.

Page 31: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Listen

• Listen sind die grundlegende Datenstruktur der nichtnumerischen Programmierung.

Beispiel:

[a,b,c,d(f), f,1,2,anna,[e,f],berta]

Page 32: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Listen als Baum

• Listen werden in Prolog (wie alle strukturierten Objekte) als Baum aufgefasst.

Page 33: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Zerlegen von Listen

• Eine Liste kann immer zerlegt werden in das erste Listenelement (Kopf) und den Rest.

[ K | R]• Spezialfall: Leere Liste

[]

Page 34: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Suche nach dem Vorhandensein von Listenelementen

enthalten(Element, [Element|R]).

enthalten(Element, [Y|R]):-enthalten(Element,R).

Page 35: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Hinzufügen eines Elements am Kopf

hinzu(X,L, [X|L]).

Page 36: Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz dauscher@informatik.uni-mainz.de Einführung in die Funktionsweise von.

Konkatenieren (verschmelzen) von Listen

konkat([],L,L).

konkat([X|L1], L2, [X|L3]):- konkat(L1,L2,L3).