Prolog 4. Kapitel: Listen
|
|
|
- Franz Burgstaller
- vor 8 Jahren
- Abrufe
Transkript
1 Prolog 4. Kapitel: Listen Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Petersen Prolog: Kapitel 4 1
2 Zusammenfassung Kapitel 3 Wir haben gelernt, dass die Rekursion eine essentielle Programmiertechnik in Prolog ist. Wir wissen, dass die Rekursion uns das Schreiben von kompakten und präzisen Programmen ermöglicht. Wichtig ist die deklarative sowie prozedurale Bedeutung einer Wissensbasis zu verstehen. Keywords: Rekursion, Problemlösungsstrategie, deklarative / prozedurale Bedeutung. Wichtig: Die Rekursion ist ein äußerst wichtiges Grundkonzept in Prolog. Ausblick Kapitel 4: Listen Petersen Prolog: Kapitel 4 2
3 Listen in Prolog Listen sind sehr mächtige Datenstrukturen in Prolog. Listen sind endliche Sequenzen von Elementen: % Liste mit atomaren Elementen: [mia, vincent, jules, mia] % Liste mit verschiedenen Termen als Elemente: [mia, 2, mother(jules), X, 1.7] % leere Liste: [] % Listenelemente koennen Listen sein: [mia, [[3,4,paul], mother(jules)], X] Listen können verschachtelt sein (Listen können Listen als Elemente haben) Die Reihenfolge der Elemente ist wichtig [a,b,c] [b,a,c] (Unterschied zu Mengen). Dasselbe Element kann mehrfach in einer Liste vorkommen (Unterschied zu Mengen). Petersen Prolog: Kapitel 4 3
4 Unifikation / Matching von Listen Zwei Listen sind unifizierbar, wenn sie dieselbe Länge haben und wenn die korrespondierenden Listenelemente unifizierbar sind.?- [a,b,x]=[y,b,3]. X = 3, Y = a?- [[a,b,c],b,3]=[y,b,3]. Y = [a, b, c]?- [a,b,c] = X. % Variablen koennen mit Listen unifiziert werden. X=[a,b,c]?- [a,b,x,c]=[y,b,3].?- [a,c,3]=[y,b,3]. Die Länge einer Lister ist die Zahl ihrer Elemente. Petersen Prolog: Kapitel 4 4
5 Listenzerlegung in Prolog Prolog hat einen eingebauten Operator (Listenkonstruktor) mit dem man eine Liste in Kopf (head) und Rest (tail) zerlegen kann. Der Kopf ist das erste Element der Liste. Der Rest ist die Restliste.?- [Head Tail] = [mia, vincent, jules, mia]. Head = mia, Tail = [vincent, jules, mia]. Eine leere Liste hat keinen Head und lässt sich somit nicht zerlegen:?- [Head Tail] = []. Man kann mit auch mehr als ein Element am Anfang abtrennen:?- [First,Second Tail] = [mia, vincent, jules, mia]. First = mia, Second = vincent, Tail = [jules, mia]. Übung: Syntax von Listen Übung: Matching von Listen Petersen Prolog: Kapitel 4 5
6 Anonyme Variable Die Variable _ ist die anonyme Variable in Prolog. Sie kommt immer dann zum Einsatz, wenn ein Wert zwar variabel sein soll, später aber nicht mehr benötigt wird. Die anonyme Variabel erhöht die Lesbarkeit der Programme. Anders als bei anderen Variablen ist jedes Vorkommen der anonymen Variabel unabhängig von den anderen. Sie kann also immer wieder anders initialisiert werden: isst_gerne(x,x) = isst_gerne(a,b). isst_gerne(_,_) = isst_gerne(a,b). true. Hinweis: Variablen wie _X, die mit einem Unterstrich beginnen sind nicht anonym, sie führen aber im Gegensatz zu anderen Variablen beim Konsultieren einer Wissensbasis nicht zu der Warnung: singleton variables:. Petersen Prolog: Kapitel 4 6
7 Anonyme Variable Beispielproblem: Wir wollen das 2. und 4. Element einer Liste herausgreifen: % ohne anonyme Variabel erhaelt man Werte fuer alle % Variablen der Anfrage.?- [X1,X2,X3,X4 T] = [mia, vincent, jules, mia, otto, lena]. X1 = mia, X2 = vincent, X3 = jules, X4 = mia, T = [otto,lena]. % mit anonymer Variable nur die gesuchten.?- [_,X2,_,X4 _] = [mia, vincent, jules, mia, otto, lena]. X2 = vincent, X4 = mia. Übung Petersen Prolog: Kapitel 4 7
8 Prädikat: member/2 member/2 ist ein rekursiv definiertes Prädikat, das überprüft, ob ein Element (ein Term) in einer Liste vorkommt: % member/2, member(term,list) member(x,[x _]). member(x,[_ T]) :- member(x,t). Wie ist das Programm zu verstehen? Petersen Prolog: Kapitel 4 8
9 Prädikat: member/2 member/2 ist ein rekursiv definiertes Prädikat, das überprüft, ob ein Element (ein Term) in einer Liste vorkommt: % member/2, member(term,list) member(x,[x _]). member(x,[_ T]) :- member(x,t). Wie ist das Programm zu verstehen? Der Fakt member(x,[x _]). besagt, dass etwas ein Element einer Liste ist, wenn es das erste Element (der Head) der Liste ist. Die Regel member(x,[_ T]):- member(x,t). besagt, dass etwas ein Element einer Liste ist, wenn es ein Element der Restliste (des Tails) ist. Jedes Element einer Liste ist entweder erstes Element oder ein Element im Tail. Vorsicht: member/2 ist ein in der Library lists vordefiniertes Prädikat, das von manchen Prologimplementierungen automatisch geladen wird. Verwenden sie daher besser einen anderen Namen, z.b. my_member/2. Petersen Prolog: Kapitel 4 8
10 member/2: Beispielanfrage (1) member(x,[x _]). member(x,[_ T]) :- member(x,t). Beispielanfrage:?- member(c,[a,b,c,d]). Die erste Klausel passt nicht, aber die zweite. Weiter geht es mit: member(c,[b,c,d]). Und wieder passt nur die rekursive Klausel und es geht weiter mit: member(c,[c,d]). Jetzt passt die erste Klausel (c ist das erste Element der Liste). Wir bekommen:?- member(c,[a,b,c,d]). true. Petersen Prolog: Kapitel 4 9
11 member/2: Beispielanfrage (2) member(x,[x _]). member(x,[_ T]) :- member(x,t). Beispielanfrage:?- member(c,[a,b]). Die erste Klausel passt nicht, aber die zweite. Weiter geht es mit: member(c,[b]). Und wieder passt nur die rekursive Klausel und es geht weiter mit: member(c,[]). Jetzt passt keine der beiden Klauseln, da die Liste leer ist. Wir bekommen:?- member(c,[a,b]). Übung Petersen Prolog: Kapitel 4 10
12 Vorteile der deklarativen Programmierung member(x,[x _]). member(x,[_ T]) :- member(x,t). Die deklarative Logik von member/2 erfasst verschiedene Fälle, für die in prozeduralen Sprachen separate Prozeduren geschrieben werden müssten: % Ist 1 in Liste [1,2,3]??- member(1,[1,2,3]). % In welchen Listen ist 1??- member(1,l). % Welche X sind in [1,2,3]??- member(x,[1,2,3]). % In welchen Listen ist X??- member(x,l). Versuchen Sie Ihre Prädikate immer so zu definieren, dass möglichst alle Anfragerichtungen möglich sind. Petersen Prolog: Kapitel 4 11
13 rekursive Listenverarbeitung an einem Beispiel Die Definition von Prädikaten, die Listen rekursiv verarbeiten, gehört zu den zentralen Aufgaben in der Prologprogrammierung. Beispiel: Prädikat a2b/2, das zwei Listen L1 und L2 nimmt und genau dann zutrifft, wenn beide Listen gleich lang sind und L1 nur aus a s und L2 nur aus b s besteht. Vorgehensweise: Zunächst sollte man sich möglichst verschiedene positive und negative Beispiele für die Belegungen der Variablen L1 und L2 überlegen: % positive Beispiele?- a2b([],[]). % leere Liste true.?- a2b([a],[b]). % Liste mit genau einem Element true.?- a2b([a,a],[b,b]). % Liste mit mehr als einem Element true. Petersen Prolog: Kapitel 4 12
14 rekursive Listenverarbeitung an einem Beispiel % negative Beispiele?- a2b([a,c,a],[b,b,b]). % L1 besteht nicht nur aus a s?- a2b([a,a,a],[b,c,b]). % L2 besteht nicht nur aus b s?- a2b([a,a],[b,b,b]). % L1 ist kuerzer als L2?- a2b([a,a,a],[b,b]). % L1 ist laenger als L2?- a2b(t,[b,b]). % L1 ist keine Liste?- a2b([a,a],t). % L2 ist keine Liste Petersen Prolog: Kapitel 4 13
15 rekursive Listenverarbeitung an einem Beispiel Ausgehend von dieser Aufstellung möglicher Anfragen ist es oft relativ einfach, die Ankerklausel zu formulieren: der Fall mit den einfachsten Listen, die zu einem true führen. a2b([],[]). Anschließend benötigt man noch die rekursive Klausel: zwei Listen erfüllen die Bedingung des Prädikats a2b/2, wenn die erste Liste mit einem a beginnt und die zweite mit einem b und die Restlisten die Bedingung a2b/2 erfüllen: a2b([],[]). a2b([a T1],[b T2]):- a2b(t1,t2). Abschließend sollte man immer die Prädikatsdefinition mit den zuvor aufgestellten Positiv- und Negativbeispielen testen. Übung Petersen Prolog: Kapitel 4 14
16 Interne rekursive Listenrepräsentation Prolog behandelt nichtleere Listen intern als zweistellige zusammengesetzte Terme mit Funktor [ ].?- [a,b]= [ ] (a, [ ] (b,[])). true. Nichtleere Listen werden dabei in Kopf und Rest zerlegt. Der Rest ist entweder die leere oder wiederum eine nichtleere Liste. [ ] (a, []) [a []] [a] [ ] (a, [ ] (b, [])) [a [b []]] [a,b] [ ] (a, [ ] (b, [ ] (c, []))) [a [b [c []]]] [a,b,c] Statt [ ] verwenden viele Implementierungen ein anderes Symbol (z.b.. ). Petersen Prolog: Kapitel 4 15
17 Interne rekursive Listenrepräsentation Listen können als binäre Bäume aufgefasst werden: [ ] a [ ] [ ] (a, [ ] (b, [ ] (c, []))) b [ ] c [ ] Petersen Prolog: Kapitel 4 16
18 Zusammenfassung Kapitel 4 Wir haben Listen als mächtige Datenstrukturen in Prolog kennengelernt und mithilfe des Listenkonstruktors dekonstruiert. Wir haben gelernt, Prädikate zu definieren, die Listen rekursiv verarbeiten und das wichtige Prädikat member/2 kennengelernt. Wir haben die anonyme Variable _ kennengelernt. Keywords: Listenkonstruktor, Kopf (Head), Restliste (Tail), rekursive Listenverarbeitung, member/2, anonyme Variable. Wichtig: Die rekursive Verarbeitung von Listen ist eine zentrale Programmiertechnik in Prolog. Ausblick Kapitel 5: Arithmetik Petersen Prolog: Kapitel 4 17
19 Übung: syntaktisch wohlgeformte Listen Welche der folgenden Ausdrücke sind syntaktisch wohlgeformte Listen in Prolog? Wie lang sind die Listen? 1 [1 [2,3,4]] 2 [1,2,3 []] 3 [1 2,3,4] 4 [1 [2 [3 [4]]]] 5 [1,2,3,4 []] 6 [[] []] 7 [[1,2] 4] 8 [[1,2],[3,4] [5,6,7]] zurück Petersen Prolog: Kapitel 4 18
20 Übung: Matching von Listen Was antwortet Prolog auf die folgenden Anfragen? 1?- [a,b,c,d] = [a,[b,c,d]]. 2?- [a,b,c,d] = [a [b,c,d]]. 3?- [a,b,c,d] = [a,b,[c,d]]. 4?- [a,b,c,d] = [a,b [c,d]]. 5?- [a,b,c,d] = [a,b,c,[d]]. 6?- [a,b,c,d] = [a,b,c [d]]. 7?- [a,b,c,d] = [a,b,c,d,[]]. 8?- [a,b,c,d] = [a,b,c,d []]. 9?- [a,b,c,d] = [a,b,x]. 10?- [a,b,c,d] = [a,b X]. 11?- [a,b,c,d] = [a,b,[c,d]]. 12?- [a,b,c,d] = [a [b [c,d]]]. 13?- [[die,y] Z]=[[X,katze],[ist,weg]]. 14?- [a B]=[A b]. % Vorsicht:?- is_list([a b]). liefert false. 15?- [anna,x]=[y [maria]]. zurück Petersen Prolog: Kapitel 4 19
21 Übung: Matching von Listen mit anonymer Variable Was antwortet Prolog auf die folgenden Anfragen? 1?- [] = _. 2?- [] = [_]. 3?- [] = [_ []]. 4?- [_]=[_ []]. 5?- [_,X,_,Y _] = [dead(zed), [2, [b, chopper]], [], []]. 6?- [_,X,_,Y _] = [dead(zed), [2, [b, chopper]], []]. 7?- [_,_,[_ X] _] = [[], dead(zed), [2, [b, chopper]], [], Z, [2, [b, chopper]]]. zurück Petersen Prolog: Kapitel 4 20
22 Übung: einfache Listenprädikate Schreiben sie ein Prädikat third/2, das gelingt, wenn das zweite Argument eine Liste ist und das erste Argument das dritte Element dieser Liste ist.?- third(a,[b,c,a,d,e]). true. Schreiben sie ein Prädikat tausch12/2, das zwei Listen als Argumente nimmt und gelingt, wenn sich die beiden Listen nur in der Reihenfolge der ersten beiden Elemente unterscheiden.?- tausch([a,b,c,d],[b,a,c,d]). true. Petersen Prolog: Kapitel 4 21
23 Übung: member Zeichnen sie die Suchbäume zu den folgenden Anfragen:?- member(b,[c,b,a,y]).?- member(x,[a,b,c]).?- member(x,[a,b,c]). zurück Petersen Prolog: Kapitel 4 22
24 Übung: auf member/2 beruhende Prädikate Für die Definition der folgenden Prädikate kann member/2 verwendet werden. 1 Schreibe ein Prädikat all_members/2, das zwei Listen L1 und L2 nimmt und gelingt, wenn alle Elemente von L1 auch Element von L2 sind.?- all_members([a,c],[a,b,c,d]). true.?- all_members([a,e],[a,b,c,d]).?- all_members(a,[a,b,c,d]). 2 Schreibe ein Prädikat set_equal/2, das zwei Listen L1 und L2 nimmt und gelingt, wenn die beiden Listen als Mengen betrachtet gleich sind (also die gleichen Elemente haben).?- set_equal([a,b,a],[b,b,b,a]). true.?- set_equal([a,b,c],[b,b,b,a]).?- set_equal([a,b],[c,a,b]). zurück Petersen Prolog: Kapitel 4 23
25 Übung: endliche Automaten a Gegeben sei der folgende endliche Automat: start q 0 q 1 a b b Dieser Automat akzeptiert die Sprache aller Sequenzen über dem Alphabet {a, b}, die eine gerade Anzahl von a s beinhalten. Repräsentieren Sie diesen Automaten in Prolog und schreiben Sie ein Prädikat fsa_accept/1, das als Argument eine Liste nimmt und gelingt, wenn die Liste eine von dem Automaten akzeptierte Sequenz ist.?- fsa_accept([a,b,a,a,b,b,a]). true.?- fsa_accept([a,a,c]).?- fsa_accept([a,b]). Petersen Prolog: Kapitel 4 24
26 Übung: endliche Transduktoren [Zusatzaufgabe] Gegeben sei der folgende endliche Transduktor: a:a q 0 start q 1 a:b b:b b:b Dieser Transduktor akzeptiert Paare von Sequenzen über dem Alphabet {a, b}, wobei die zweite Sequenz aus der ersten hervorgeht, wenn man jedes zweite a durch ein b ersetzt.?- trans_accept([a,b,a],[a,b,b]). true. Repräsentieren Sie diesen Automaten in Prolog und schreiben Sie ein?- trans_accept([a,a,a,a],x). X=[a,b,a,b]. Prädikat trans_accept/1, das als?- trans_accept(x,[b,b]). X=[b,b]. Argumente Listenpaare nimmt und?- trans_accept(x,[b,a,b]). gelingt, wenn das Listenpaar von dem X=[b,a,b], Transduktor akzeptiert wird. X=[b,a,a].?- trans_accept([a,c],x). Petersen Prolog: Kapitel 4 25
27 Übung: Grammatik % Grammatikregeln: s([w1,w2 T]):- np([w1,w2]), vp(t). np([d,n]):- det([d]), n([n]). vp([v T]):- v([v]), np(t). % Lexikon: det([eine]). det([die]). det([keine]). n([maus]). n([katze]). v([jagt]). v([klaut]). Wieviele Sätze können mit dieser Grammatik generiert werden? Erweitern Sie die Grammatik um Pluralformen und / oder um Maskulina. Petersen Prolog: Kapitel 4 26
28 Übung: Aufgaben aus Learn Prolog Now! Bearbeiten sie die folgenden Aufgaben aus Learn Prolog Now! : Exercise 4.5 Exercise 4.6 [Zusatzaufgabe] Practical Session zu Kapitel 4 [Zusatzaufgabe] Petersen Prolog: Kapitel 4 27
29 Logikaufgabe [Zusatzaufgabe] Eine kleine Geschichte Es waren einmal ein Prinz und eine Prinzessin. Prinz: Ich will dich heiraten. Prinzessin: Ich heirate dich nur, wenn du eine Logikaufgabe lösen kannst. Prinz: Welche? Prinzessin: Vor dir liegen 3 Umschläge, in einem ist mein Bild. Nur eine Aussage auf den Umschlägen ist wahr. Wo ist mein Bild? Umschlag A: Das Bild ist in diesem Umschlag. Umschlag B: Das Bild ist nicht in diesem Umschlag. Umschlag C: Das Bild ist nicht in Umschlag A. Lösungshinweis: Sie können den eingebauten Operator not/1 verwenden. not/1 ist beweisbar, wenn das Argument nicht beweisbar ist und umgekehrt.?- not(member(a,[a,b,c])).?- not(member(a,[b,c])). true. Petersen Prolog: Kapitel 4 28
30 Einige Lösungen von Foliensatz 2 Grammatikaufgabe: % Erarbeitet mit Cora Scholl % Regelsystem: s(s(np,vp)) :- np(np,num), vp(vp,num). np(np(a,n),num) :- artikel(a,num), nomen(n,num). vp(vp(v,np),num) :- verb(v,num), np(np,_num2). vp(vp(v),num) :- verb(v,num). % Lexikon: nomen(katze,sg). nomen(katzen,pl). nomen(maus,sg). nomen(maeuse,pl). artikel(die,sg). artikel(die,pl). artikel(eine,sg). artikel(viele,pl). verb(klaut,sg). verb(klauen,pl). verb(jagt,sg). verb(jagen,pl). Ecken des Rechtecks: % Ecke oben links:?- horizontal(line(point(6,3),ol)), vertical(line(point(1,1),ol)). % Ecke unten rechts:?- horizontal(line(point(1,1),ur)), vertical(line(point(6,3),ur)). % beide Ecken in einer Anfrage:?- horizontal(line(point(6,3),ol)), vertical(line(point(1,1),ol)), horizontal(line(point(1,1),ur)), vertical(line(point(6,3),ur)). Petersen Prolog: Kapitel 4 29
Prolog 3. Kapitel: Rekursion
Prolog 3. Kapitel: Rekursion Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Petersen Prolog: Kapitel 3 1 Zusammenfassung: Kapitel 2 Wir haben gelernt wie komplexe
Prolog 5. Kapitel: Arithmetik
Zusammenfassung Kapitel 4 Prolog 5. Kapitel: Arithmetik Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Wir haben Listen als mächtige Datenstrukturen in Prolog kennengelernt
Rekursive Listenverarbeitung
Rekursive Listenverarbeitung Übersicht Rekursion ist die wichtigste Programmiertechnik in Prolog! Rekursive Datenstrukturen Einfache und rekursiv gebildete Strukturen Rekursive Datenstrukturen und rekursive
Einführung in PROLOG IV Listen
Einführung in PROLOG IV Listen Beispiele für Listen in PROLOG: 1. [mia, vincent, jules, yolanda] 2. [mia, robber(honey_bunny), X, 2, mia] 3. [] 4. [mia, [vincent, jules], [butch, girlfriend(butch)]] 5.
LISTEN. Programmierkurs Prolog p.1
LISTEN Programmierkurs Prolog p.1 Liste Listen sind rekursive Datenstrukturen, die dazu dienen geordnete Mengen von Elementen zu beschreiben. Man kann sich Listen in Prolog als Behälter vorstellen, die
Teil 4: Rekursion und Listen
Einführung in das Programmieren Prolog Sommersemester 2006 Teil 4: Rekursion und Listen Version 1.0 Gliederung der LV Teil 1: Ein motivierendes Beispiel Teil 2: Einführung und Grundkonzepte Syntax, Regeln,
Listen. bersicht. Zweck. Listen allgemein Listen in Prolog. Programmiertechniken mit Listen. Erstellen von Prolog-Programmen mit Listen
Listen bersicht Listen allgemein Listen in Prolog Schreibweise Listen als rekursive Datenstruktur Unifikation Programmiertechniken mit Listen Zweck rekursive Suche Abbilden Erstellen von Prolog-Programmen
5 Logische Programmierung
5 Logische Programmierung Logik wird als Programmiersprache benutzt Der logische Ansatz zu Programmierung ist (sowie der funktionale) deklarativ; Programme können mit Hilfe zweier abstrakten, maschinen-unabhängigen
Fragen zum Nachdenken: Wie könnte man das Fehlen eines Attribut-Wertes interpretieren?
Attribut-Werte-Paare Eine Eigenschaft kann beschrieben werden durch ein Paar [a,w]. Dabei bezeichnet a das Attribut und w den konkreten Wert aus dem Wertebereich W a des Attributs. Die Eigenschaften eines
Gliederung. Programmierparadigmen. Einführung in Prolog: Einführung in Prolog: Programmieren in Prolog. Einführung Syntax Regeln Listen Relationen
Gliederung Programmierparadigmen Programmieren in Prolog D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Sommer 2011, 26. April
Verkettete Datenstrukturen: Bäume
Verkettete Datenstrukturen: Bäume 1 Graphen Gerichteter Graph: Menge von Knoten (= Elementen) + Menge von Kanten. Kante: Verbindung zwischen zwei Knoten k 1 k 2 = Paar von Knoten (k 1, k 2 ). Menge aller
Prolog 1. Kapitel: Fakten, Regeln und Anfragen
Allgemeines Prolog 1. Kapitel: Fakten, Regeln und Anfragen Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Prolog (aus dem franz. Programming en Logique) ist eine
Theorie der Informatik
Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 Einführung Beispiel: Aussagenlogische Formeln Aus dem Logikteil: Definition (Syntax
(Logik und) Logikprogrammierung
Übungsaufgaben zur Lehrveranstaltung (Logik und) Logikprogrammierung im Studiengang Informatik Technische Universität Ilmenau Fakultät für Informatik und Automatisierung Fachgebiet Künstliche Intelligenz
Prolog 8. Kapitel: parametrisierte DCGs
Zusammenfassung Kapitel 7 Prolog 8. Kapitel: parametrisierte DCGs Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Wir haben gesehen, dass Grammatiken, die append/3
Theorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie
Theorie der Informatik 17. März 2014 6. Formale Sprachen und Grammatiken Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 6.1 Einführung
Logik-Grundlagen. Syntax der Prädikatenlogik
Logik-Grundlagen X 1 :...: X k : ( A 1 A 2... A m B 1 B 2... B n ) Logische und funktionale Programmierung - Universität Potsdam - M. Thomas - Prädikatenlogik III.1 Syntax der Prädikatenlogik Prädikat:
Binäre Suchbäume (binary search trees, kurz: bst)
Binäre Suchbäume (binary search trees, kurz: bst) Datenstruktur zum Speichern einer endlichen Menge M von Zahlen. Genauer: Binärbaum T mit n := M Knoten Jeder Knoten v von T ist mit einer Zahl m v M markiert.
Einführung in das Programmieren Prolog Sommersemester 2006. Teil 2: Arithmetik. Version 1.0
Einführung in das Programmieren Prolog Sommersemester 2006 Teil 2: Arithmetik Version 1.0 Gliederung der LV Teil 1: Ein motivierendes Beispiel Teil 2: Einführung und Grundkonzepte Syntax, Regeln, Unifikation,
Die Logik der Sprache PL
II Die Logik der Sprache PL 16 Der Aufbau der Sprache PL Ein Beispiel Problem (1) Alle Menschen sind sterblich. Sokrates ist ein Mensch. Also: Sokrates ist sterblich. Intuitiv ist dieses Argument gültig.
Auswahl von Klauseln und Atomen in Prolog
5.6 Prolog... ist die bekannteste Implementierung einer LP-Sprache; wurde Anfang der 1970er von Alain Colmerauer (Marseille) und Robert Kowalski (Edinburgh) entwickelt. konkretisiert den vorgestellten
Kapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie
Gliederung 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie 2.1. 2.2. Reguläre Sprachen 2.3. Kontextfreie Sprachen 2/1, Folie 1 2015 Prof. Steffen
Algorithmen mit konstantem Platzbedarf: Die Klasse REG
Algorithmen mit konstantem Platzbedarf: Die Klasse REG Sommerakademie Rot an der Rot AG 1 Wieviel Platz brauchen Algorithmen wirklich? Daniel Alm Institut für Numerische Simulation Universität Bonn August
Mathematik für Informatiker I
Mathematik für Informatiker I Mitschrift zur Vorlesung vom 19.10.2004 In diesem Kurs geht es um Mathematik und um Informatik. Es gibt sehr verschiedene Definitionen, aber für mich ist Mathematik die Wissenschaft
13. Übungsblatt
Prolog für Linguisten 13. Übungsblatt 12.2.2011 Dieses Übungsblatt ist verpflichtend und wird benotet (48 Punkte + 8 Zusatzpunkte ). Achte besonders auf die Funktionalität des Programms mit verschiedenen
Mathematische Grundlagen der Computerlinguistik Relationen und Funktionen
Mathematische Grundlagen der Computerlinguistik Relationen und Funktionen Dozentin: Wiebke Petersen 2. Foliensatz Wiebke Petersen math. Grundlagen 20 n-tupel und Cartesisches Produkt Mengen sind ungeordnet,
Strukturelle Rekursion und Induktion
Kapitel 2 Strukturelle Rekursion und Induktion Rekursion ist eine konstruktive Technik für die Beschreibung unendlicher Mengen (und damit insbesondere für die Beschreibung unendliche Funktionen). Induktion
26 Hierarchisch strukturierte Daten
Algorithmik II Peter Wilke Sommersemester 2005 Teil III Funktionale Programmierung 26 Hierarchisch strukturierte Daten Peter Wilke Algorithmik II Sommersemester 2005 1 Peter Wilke Algorithmik II Sommersemester
Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -
Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen - Thies Pfeiffer Technische Fakultät [email protected] Vorlesung, Universität Bielefeld, Winter 2012/2013 1 / 1 Exkurs: Formale
Einführung in PROLOG. Christian Stocker
Einführung in PROLOG Christian Stocker Inhalt Was ist PROLOG? Der PROLOG- Interpreter Welcher Interpreter? SWI-Prolog Syntax Einführung Fakten, Regeln, Anfragen Operatoren Rekursion Listen Cut Funktionsweise
Syntax von Programmiersprachen
"Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt Syntax von Programmiersprachen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang WS 07/08
Erwin Grüner 09.02.2006
FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife
Tag 7. Pattern Matching und eigene Datentypen
Tag 7 Pattern Matching und eigene Datentypen Heute werden wir eine Technik kennenlernen, die dafür sorgt, daß wir sehr viel übersichtlichere und kürzere Programme schreiben können. Als Überleitung auf
Binary Decision Diagrams (Einführung)
Binary Decision Diagrams (Einführung) Binary Decision Diagrams (BDDs) sind bestimmte Graphen, die als Datenstruktur für die kompakte Darstellung von booleschen Funktionen benutzt werden. BDDs wurden von
Bestandteile von Prolog-Programmen. Syntax und Datenstrukturen. Legende Syntaxdiagramme. Lesen von Syntaxdiagrammen
Syntax und Datenstrukturen Bestandteile von Prolog-Programmen Übersicht Woraus besteht ein Prolog-Programm? Syntaxdiagramme für Bildungsregeln Programm, Klausel, Anfrage, 3 Sorten von en atomare e, Variablen,
Grundlagen von Datenbanken
Grundlagen von Datenbanken SS 2010 4. Prolog als Datenbanksprache Prof. Dr. Stefan Böttcher Universität Paderborn Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher 4. Prolog als Datenbanksprache
Künstliche Intelligenz Einführung in Prolog
Künstliche Intelligenz Einführung in Prolog Stephan Schwiebert WS 2009/20010 Sprachliche Informationsverarbeitung Institut für Linguistik Universität zu Köln Was ist Programmieren? Was ist Programmieren?
Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:
Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: take 1 0 ( f i l t e r ( fn x => x mod 2=0) nat ) ; val it =
Logische Programmierung
Logische Programmierung B-82 Deklaratives Programmieren in Prädikatenlogik: Problem beschreiben statt Algorithmus implementieren (idealisiert). Grundlagen: Relationen bzw. Prädikate (statt Funktionen);
Einführung in die Computerlinguistik Formale Grammatiken rechtslineare und kontextfreie Grammatiken Kellerautomaten
Einführung in die Computerlinguistik Formale Grammatiken rechtslineare und kontextfreie Grammatiken Kellerautomaten Dozentin: Wiebke Petersen 13. Foliensatz Wiebke Petersen Einführung CL 1 Formale Grammatik
3. Exkurs in weitere Arten der Programmierung
3. Exkurs in weitere Arten der Programmierung Inhalt: Objektorientierte Programmierung in C++ Funktional-Logische Programmierung in Prolog Funktional-logische Programmierung in Prolog Prolog Programming
3 Terme und Algebren 3.1 Terme
3 Terme und Algebren 3.1 Terme Mod - 3.1 In allen formalen Kalkülen benutzt man Formeln als Ausdrucksmittel. Hier betrachten wir nur ihre Struktur - nicht ihre Bedeutung. Wir nennen sie Terme. Terme bestehen
Wissensrepräsentation und -verarbeitung in Logiken. bereinigt Pränex Skolem ( -Eliminierung) Klausel (Menge von Klauseln, Notation ohne Quantoren)
Was bisher geschah Wissensrepräsentation und -verarbeitung in Logiken klassische Aussagenlogik klassische Prädikatenlogik: Wiederholung Syntax, Semantik Normalformen: bereinigt Pränex Skolem ( -Eliminierung)
Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):
Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel
Sprachen und Programmiersprachen
Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische Korrektheit fest. Semantik legt die Bedeutung von syntaktisch korrekten
Alphabet, formale Sprache
n Alphabet Alphabet, formale Sprache l nichtleere endliche Menge von Zeichen ( Buchstaben, Symbole) n Wort über einem Alphabet l endliche Folge von Buchstaben, die auch leer sein kann ( ε leere Wort) l
SS2010 BAI2-LBP Gruppe 1 Team 07 Entwurf zu Aufgabe 4. R. C. Ladiges, D. Fast 10. Juni 2010
SS2010 BAI2-LBP Gruppe 1 Team 07 Entwurf zu Aufgabe 4 R. C. Ladiges, D. Fast 10. Juni 2010 Inhaltsverzeichnis 4 Aufgabe 4 3 4.1 Sich mit dem Programmpaket vertraut machen.................... 3 4.1.1 Aufgabenstellung.................................
Aufgabentypen die in der Klausur vorkommen
Aufgabentypen die in der Klausur vorkommen können 1. Nennen Sie fünf wichtige Anwendungsgebiete der Computerlinguistik. 2. Für welches der drei Anwendungsgebiete Maschinelle Übersetzung, Rechtschreibkorrektur
Abschnitt 3: Mathematische Grundlagen
Abschnitt 3: Mathematische Grundlagen 3. Mathematische Grundlagen 3.1 3.2 Induktion und Rekursion 3.3 Boolsche Algebra Peer Kröger (LMU München) Einführung in die Programmierung WS 14/15 48 / 155 Überblick
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable
1 Kapitel 3 Grunddatentypen, Ausdrücke und Variable 2 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen Datenstrukturen werden mit einem
1.2 Rechnen mit Termen II
1.2 Rechnen mit Termen II Inhaltsverzeichnis 1 Ziele 2 2 Potenzen, bei denen der Exponent negativ oder 0 ist 2 3 Potenzregeln 3 4 Terme mit Wurzelausdrücken 4 5 Wurzelgesetze 4 6 Distributivgesetz 5 7
Vor(schau)kurs für Studienanfänger Mathematik: Aussagen und Mengen
Vor(schau)kurs für Studienanfänger Mathematik: Aussagen und Mengen 09.10.2014 Herzlich Willkommen zum 2. Teil des Vorschaukurses für Mathematik! Organisatorisches Der Vorkurs besteht aus sechs Blöcken
Motivation. Formale Grundlagen der Informatik 1 Kapitel 19. Syntax & Semantik. Motivation - Beispiel. Motivation - Beispiel
Motivation Formale Grundlagen der Informatik 1 Kapitel 19 & Die ist eine Erweiterung der Aussagenlogik. Sie hat eine größere Ausdrucksstärke und erlaub eine feinere Differenzierung. Ferner sind Beziehungen/Relationen
3.4 Struktur von Programmen
3.4 Struktur von Programmen Programme sind hierarchisch aus Komponenten aufgebaut. Für jede Komponente geben wir Regeln an, wie sie aus anderen Komponenten zusammengesetzt sein können. program ::= decl*
Einführung in die Computerlinguistik deterministische und nichtdeterministische endliche Automaten
Einführung in die Computerlinguistik deterministische und nichtdeterministische endliche Automaten Dozentin: Wiebke Petersen Foliensatz 4 Wiebke Petersen Einführung CL 1 Äquivalenz von endlichen Automaten
zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
Permutation = Anordnung aller Elemente einer Menge, Kombination = Auswahl von einigen aus vielen Elementen, Variation = Auswahl und Anordnung.
Kombinatorik Was ist Kombinatorik? Die 92 natürlichen chemischen Elemente sind die mathematischen Elemente der Menge chemisches Periodensystem. Ebenso sind die zehn Ziffern 0 9 eine Menge, jede Ziffer
Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie [email protected]
Inhalt SWP Funktionale Programme (2. Teil) Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie [email protected] Interpreter für funktionale Sprache
t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )
Definition B : Menge der binären Bäume, rekursiv definiert durch die Regeln: ist ein binärer Baum sind t l, t r binäre Bäume, so ist auch t =, t l, t r ein binärer Baum nur das, was durch die beiden vorigen
Wissensbasierte Systeme
WBS4 Slide 1 Wissensbasierte Systeme Vorlesung 4 vom 03.11.2004 Sebastian Iwanowski FH Wedel WBS4 Slide 2 Wissensbasierte Systeme 1. Motivation 2. Prinzipien und Anwendungen 3. Logische Grundlagen 4. Suchstrategien
Technische Universität München
Stand der Vorlesung Kapitel 2: Auffrischung einiger mathematischer Grundlagen Mengen, Potenzmenge, Kreuzprodukt (Paare, Tripel, n-tupel) Relation: Teilmenge MxN Eigenschaften: reflexiv, symmetrisch, transitiv,
Grundlagen der Theoretischen Informatik
FH Wedel Prof. Dr. Sebastian Iwanowski GTI22 Folie 1 Grundlagen der Theoretischen Informatik Sebastian Iwanowski FH Wedel Kap. 2: Logik, Teil 2.2: Prädikatenlogik FH Wedel Prof. Dr. Sebastian Iwanowski
zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
Programmieren in Haskell Programmiermethodik
Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs
Fakten, Regeln und Anfragen
Fakten, Regeln und Anfragen Prolog Grundkurs WS 99/00 Christof Rumpf [email protected] 18.10.99 GK Prolog - Fakten, Regeln und Anfragen 1 Programmieren = Problemlösen Prolog ist eine deklarative
Empfehlenswerte Referenzen
Wenn Google etwas nicht finden kann, fragen sie Jack Bauer. ("Fakten über Jack Bauer") Inhalt Empfehlenswerte Referenzen...1 0 Wozu reguläre Ausdrücke?...1 1 Die Elemente regulärer Ausdrücke...2 2 Ein
Datenstrukturen & Algorithmen
Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Binäre Suchbäume Einführung und Begriffe Binäre Suchbäume 2 Binäre Suchbäume Datenstruktur für dynamische Mengen
2 ZAHLEN UND VARIABLE
Zahlen und Variable 2 ZAHLEN UND VARIABLE 2.1 Grundlagen der Mengenlehre Unter einer Menge versteht man die Zusammenfassung von unterscheidbaren Objekten zu einem Ganzen. Diese Objekte bezeichnet man als
Diskrete Strukturen Kapitel 2: Grundlagen (Mengen)
WS 2016/17 Diskrete Strukturen Kapitel 2: Grundlagen (Mengen) Hans-Joachim Bungartz Lehrstuhl für wissenschaftliches Rechnen Fakultät für Informatik Technische Universität München http://www5.in.tum.de/wiki/index.php/diskrete_strukturen_-_winter_16
PROLOG. Tutorium zur Vorlesung Datenbanken und Wissensrepräsentation (Prof. Dr. G. Büchel)
PROLOG Tutorium zur Vorlesung Datenbanken und Wissensrepräsentation (Prof. Dr. G. Büchel) Stand: April 2010 Verfasser: Dipl.-Ing. (FH) Andreas W. Lockermann Vorwort Der Name PROLOG leitet sich aus den
Programmierkurs Prolog, SS 1998
Programmierkurs Prolog SS 1998 Universität Dortmund LS VIII - Prof. K. Morik Inhalt Vergleiche von Termen Typtests auf Termen Zugriff auf den Termaufbau Zugriff auf Fakten und Regeln All-Solutions Prädikate
Programmiersprachen. Marco Block. Folieninhalte teilweise übernommen von Prof. Heinz Schweppe (ALP II, SoSe 2008) und Prof. Löhr (ALP II, SoSe 2004)
Programmiersprachen Inhalt: Geschichte der Programmiersprachen Programmierparadigma Programmiersprachen im Studium Funktionale Programmierung mit Haskell Funktionale versus Imperative Programmierung Logische
Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell
Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners
Unterlagen. CPP-Uebungen-08/
Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen
Kapitel 7 des Buches, von Java-Selbstbau nach Scala-Library portiert. 2014-11-14 Christoph Knabe
Anfragen für Listen Kapitel 7 des Buches, von Java-Selbstbau nach Scala-Library portiert. 2014-11-14 Christoph Knabe 1 MapReduce-Verfahren Google u.a. verwenden Map-Reduce-Verfahren zur Verarbeitung riesiger
Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke
Theoretische Informatik 1 WS 2007/2008 Prof. Dr. Rainer Lütticke Inhalt der Vorlesung Grundlagen - Mengen, Relationen, Abbildungen/Funktionen - Datenstrukturen - Aussagenlogik Automatentheorie Formale
Grundlagen der Programmierung
GdP2 Slide 1 Grundlagen der Programmierung Vorlesung 2 Sebastian Ianoski FH Wedel GdP2 Slide 2 Beispiel ür eine Programmveriikation Gegeben sei olgender Algorithmus: i (x>0) ((y+x) 0) then z := x y else
1.2 Rechnen mit Termen II
1.2 Rechnen mit Termen II (Thema aus dem Gebiet Algebra) Inhaltsverzeichnis 1 Potenzen, bei denen der Exponent negativ oder 0 ist 2 2 Potenzregeln 2 3 Terme mit Wurzelausdrücken 4 4 Wurzelgesetze 4 5 Das
Prolog = Programmierung in Logik (Roussell, Colmerauer, 1973/74)
Logikprogrammierung Historie: Philosophie / Mathematik Künstliche Intelligenz Praktische Programmiersprache: Prolog = Programmierung in Logik (Roussell, Colmerauer, 1973/74) Grundidee: Ein Programm ist
Abstrakte Klassen und Induktive Datenbereiche
Abstrakte Klassen und Induktive Datenbereiche Abstrakte Klassen, Induktive Datenbereiche, Bäume, Binärbäume, Bäume mit Blättern, Listen, Konstruktoren, Prädikate, Selektoren, Mutatoren, Operationen. Abstrakte
1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung.
1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung. Beschreiben Sie ferner je einen frei gewählten Datentyp aus der Gruppe der skalaren und einen aus der Gruppe der strukturierten
2. Übungsblatt 6.0 VU Theoretische Informatik und Logik
2. Übungsblatt 6.0 VU Theoretische Informatik und Logik 25. September 2013 Aufgabe 1 Geben Sie jeweils eine kontextfreie Grammatik an, welche die folgenden Sprachen erzeugt, sowie einen Ableitungsbaum
Kapitel: Die Chomsky Hierarchie. Die Chomsky Hierarchie 1 / 14
Kapitel: Die Chomsky Hierarchie Die Chomsky Hierarchie 1 / 14 Allgemeine Grammatiken Definition Eine Grammatik G = (Σ, V, S, P) besteht aus: einem endlichen Alphabet Σ, einer endlichen Menge V von Variablen
Automatentheorie und formale Sprachen rechtslineare Grammatiken
Automatentheorie und formale Sprachen rechtslineare Grammatiken Dozentin: Wiebke Petersen 17.6.2009 Wiebke Petersen Automatentheorie und formale Sprachen - SoSe09 1 Pumping lemma for regular languages
Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I λ Kalkül WS 2012/2013 Berechenbarkeit - inspiriert durch Hilbert's Frage - im Jahr 1900, Paris - Internationaler Mathematikerkongress Gibt es ein System von Axiomen, aus denen alle Gesetze der Mathematik
Binäre Bäume Darstellung und Traversierung
Binäre Bäume Darstellung und Traversierung Name Frank Bollwig Matrikel-Nr. 2770085 E-Mail [email protected] Datum 15. November 2001 0. Vorbemerkungen... 3 1. Terminologie binärer Bäume... 4 2.
Terme und Gleichungen
Terme und Gleichungen Rainer Hauser November 00 Terme. Rekursive Definition der Terme Welche Objekte Terme genannt werden, wird rekursiv definiert. Die rekursive Definition legt zuerst als Basis fest,
Kurs 1613 Einführung in die imperative Programmierung
Aufgabe 1 Gegeben sei die Prozedur BubbleSort: procedure BubbleSort(var iofeld:tfeld); { var hilf:integer; i:tindex; j:tindex; vertauscht:boolean; i:=1; repeat vertauscht := false; for j := 1 to N - i
Grundbegriffe der Informatik Tutorium 12
Grundbegriffe der Informatik Tutorium 12 Tutorium Nr. 16 Philipp Oppermann 28. Januar 2015 KARLSRUHER INSTITUT FÜR TECHNOLOGIE KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum
