![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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/21.jpg)
Ä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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/22.jpg)
Ä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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022052513/570491c41a28ab14218da415/html5/thumbnails/36.jpg)
Konkatenieren (verschmelzen) von Listen
konkat([],L,L).
konkat([X|L1], L2, [X|L3]):- konkat(L1,L2,L3).