prof. dr. herbert göttler, dr. peter dauscher johannes gutenberg-universität, mainz...
TRANSCRIPT
Prof. Dr. Herbert Göttler, Dr. Peter DauscherJohannes Gutenberg-Universität, [email protected]
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).