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

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

3. Operatoren und Ausdrücke
Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Asymptotische Notation
Schnelle Matrizenoperationen von Christian Büttner
Invariante und Algorithmenentwurf
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Zusammenfassung der Vorwoche
Programmieren in Logik
Synonyme: Stapel, Keller, LIFO-Liste usw.
Listen [mia, vincent, jules, yolanda] [mia, robber(honey_bunny), X, 2, mia] [] [mia, [vincent, jules], [butch, girlfriend(butch)]] [[], dead(zed), [2,
Grundlagen der Informatik
Das Vertauschungsgesetz
X =. Allgemeine Form der Gleichung (Addition): Allgemeine FormLösungshinweis x + a = b a + x = b x = b - a Allgemeine Form der Gleichung (Subtraktion):
Listen & Beweisstrategie
Rekursive Listenverarbeitung
Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
Java- Syntax.
Algorithmen und Datenstrukturen
XINDICE The Apache XML Project Name: Jacqueline Langhorst
3. Rechnen mit natürlichen Zahlen
Robotik mit LEGO Mindstorms
Mathematische Grundlagen
Imperative Programmierung
Beispiele für Ausdrucksalgebren
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Einführung in die Programmierung
Datenbanken Mehr als Tabellen.
Datenbanken Mehr als Tabellen. Datenbank Abfragen mit SQL: Eine Tabelle filtern Tabellen realer Datenbanken können sehr viele Informationen speichern:
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Grundlagen der Programmierung
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Einführung ins Lösen von Gleichungen
4 6 5 Rechenoperationen hoch 2 ??? hoch 2 ??? hoch 2
MODULA-2.
PHP: Operatoren und Kontrollstrukturen
5. Zeiger und komplexe Datenstrukturen
Meta-Modell für Story-Diagramme und Expressions
Die Unbekannte, das x, muss allein auf einer Seite stehen! Beispiel: x =
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
Anführungszeichen?! echo 'Apfel$atf'; // ergibt: Apfel$aft
(Syntax, Strings/Zahlen, Variablen, Arrays)
Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)
Messen Zuordnung von Zahlen zu Objekten/Ereignissen gemäß Regeln
Rechnen mit negativen Klammern
Variablen und Datentypen
Programmieren 1 C++ Aufgaben / Übungen.
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
Einführung. Einführung Mengenlehre Beziehungen zwischen Mengen Einführung Definition: Menge Darstellungsarten von Mengen Definition: Leere Menge Beziehungen.
Polynomdivision Michi Hofstätter.
► Zahlen kleiner 0 heissen negative Zahlen.
Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
Welche Rechenregeln für Terme gibt es?
Theorie der unscharfen Mengen
Rechenausdrücke (Terme) – Fachbegriffe - Rechenregeln
 Präsentation transkript:

Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz Einführung in die Funktionsweise von 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=a B=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=a B=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=a B=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=a B=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=a B=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=a B=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=a B=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=a B=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=a B=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=a B=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=a B=a ; A=a B=d

Ähnlich f(X,2,Z) = f(1,Y,3). führt zur Systemantwort X=1 Z=3 Y=2

Ähnlich f(X,2,Z) = f(1,Y,p(X)). führt zur Systemantwort X=1 Z=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 Division mod modulo (Rest)

Vergleichsoperatoren X>Ynumerisch: X größer Y X<Ynumerisch: X kleiner Y X>=Ynumerisch: X größer oder gleich Y X=<Ynumerisch: X größer oder gleich Y (ACHTUNG!! Anders als in anderen Sprachen) X=:=Ydie numerischen Werte sind gleich X=\=Ydie numerischen Werte sind ungleich

Wertzuweisung VORSICHT: ?- X=1+2. resultiert in Systemantwort: X=1+2 Echtes Rechnen ?- X is 1+2. resultiert in Systemantwort X=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).