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

Post on 06-Apr-2016

223 views 2 download

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

Prof. Dr. Herbert Göttler, Dr. Peter DauscherJohannes Gutenberg-Universität, Mainzdauscher@informatik.uni-mainz.de

Einführung in die Funktionsweisevon Prolog

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).

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?

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).

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).

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).

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).

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).

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

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 ;

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).

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 ;

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 ;

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 ;

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 ;

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 ;

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 ;

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 ;

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 ;

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

Ähnlich

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

• führt zur Systemantwort

X=1Z=3Y=2

Ähnlich

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

• führt zur Systemantwort

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

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“.

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)

Arithmetische Operatoren

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

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

Wertzuweisung

• VORSICHT:

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

• Echtes Rechnen

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

Beispiel: Addiere 42

addfortytwo(X,Y):-

Y is X+42.

Beispiel: Maximum

maximum(X,Y,Max):-

X>=Y, Max is X.

maximum(X,Y,Max):-

X<Y, Max is Y.

Beispiel: Fakultät

fakultaet(0,1).

fakultaet(N,Fak) :-

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

Listen

• Listen sind die grundlegende Datenstruktur der nichtnumerischen Programmierung.

Beispiel:

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

Listen als Baum

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

Zerlegen von Listen

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

[ K | R]• Spezialfall: Leere Liste

[]

Suche nach dem Vorhandensein von Listenelementen

enthalten(Element, [Element|R]).

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

Hinzufügen eines Elements am Kopf

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

Konkatenieren (verschmelzen) von Listen

konkat([],L,L).

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