Prolog 6. Kapitel: Listenprädikate
|
|
|
- Stanislaus Haupt
- vor 7 Jahren
- Abrufe
Transkript
1 Prolog 6. Kapitel: Listenprädikate Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Petersen Prolog: Kapitel 6 1
2 Zusammenfassung Kapitel 5 Wir haben gesehen, wie wir mit Prolog rechnen können. Wir haben arithmetische Vergleichsoperatoren kennengelernt. Wir haben gelernt, wie Akkumulatoren in der rekursiven Listenverarbeitung eingesetzt werden können, um effizienter Prädikate zu erhalten. Keywords: Rechnen in Prolog mit dem Evaluationsoperator is, arithmetische Vergleichsoperatoren, Akkumulatoren. Wichtig: Die rekursive Verarbeitung von Listen mit Akkumulatoren ist eine zentrale Programmiertechnik in Prolog. Vorsicht: Die arithmetischen Vergleichsoperatoren und der Operator is fordern zwingend sofort evaluierbare Terme. Uninstantiierte Terme führen zu einem Abbruch mit Fehlermeldung. Ausblick Kapitel 6: Weitere Listenprädikate Petersen Prolog: Kapitel 6 2
3 Basisprädikate zur Listenmanipulation Vier Prädikate zur rekursiven Listenverarbeitung demonstrieren Basistechniken für beliebig komplexe Operationen auf Listen: member/2 Zugriff auf Listenelemente. member(element,list) append/3 Konkatenation von Listen. append(list1,list2,konkatlist) delete/3 Löschen/Einfügen in Listen. delete(element,list,listdeleted) reverse/2 Umkehren von Listen. reverse(list,listreversed) Petersen Prolog: Kapitel 6 3
4 Konkatenation von Listen: append/3 % append/3 % append(l1,l2,l3) % L3 is the result of concatenating L1 and L2 % L1 o L2 = L3 append([],l,l). append([h T1],L2,[H T3]) :- append(t1,l2,t3).?- append([1,2,3],[4,5,6],[1,2,3,4,5,6]). true.?- append([1,2,3],[4,5,6],l). L = [1,2,3,4,5,6].?- append(l,[4,5,6],[1,2,3,4,5,6]). L = [1,2,3].?- append([1,2,3],l,[1,2,3,4,5,6]). L = [4,5,6]. Petersen Prolog: Kapitel 6 4
5 append/3 deklarativ append([],l,l). append([h T1],L2,[H T3]) :- append(t1,l2,t3). Die Konkatenation einer Liste L an die leere Liste liefert L als Ergebnis. Wenn die Konkatenation der Listen L1 und L2 die Liste L3 ergibt, dann ergibt die Konkatenation der um ein zusätzliches Kopfelement H erweiterten List L1 mit L2 die um denselben Kopf erweiterte Liste L3. H T1 L2 H T3 [H T1] o L2 = [H T3] wenn T1 o L2 = T3 Petersen Prolog: Kapitel 6 5
6 append/3 prozedural append([],l,l). append([h T1],L2,[H T3]) :- append(t1,l2,t3).?- append([1,2,3],[4,5,6], L). Call : (7) append([1,2,3], [4,5,6], _G2304)? Call : (8) append([2,3], [4,5,6], _G2392)? Call : (9) append([3], [4,5,6], _G2395)? Call : (10) append([], [4,5,6], _G2398)? Exit : (10) append([], [4,5,6], [4,5,6])? Exit : (9) append([3], [4,5,6], [3,4,5,6])? Exit : (8) append([2,3], [4,5,6], [2,3,4,5,6])? Exit : (7) append([1,2,3], [4,5,6], [1,2,3,4,5,6])? L = [1,2,3,4,5,6] ; Petersen Prolog: Kapitel 6 6
7 Verwendung von append/3 Das Prädikat append/3 kann testen, ob eine Liste die Konkatenation von zwei Listen ist: append(+,+,+): append([a,b,c],[x,y,z],[a,b,c,x,y,z]). zwei Listen konkatenieren: append(+,+,-): append([a,b,c],[x,y,z],l). Listen zerlegen: append(-,-,+), append(-,+,+), append(+,-,+): append(x,y,[a,b,c]). append(x,[b,c,d],[a,b,c,d]). append([a,b],x,[a,b,c,d]). Petersen Prolog: Kapitel 6 7
8 Besonderheiten von append/3 Mit dem Prädikat append/3 können sehr unterschiedliche Funktionen implementiert werden. Dennoch muss man beachten, dass bei jedem Aufruf von append/3 die Liste im ersten Argument komplett abgearbeitet werden muss. aufgrund der kompletten Listenabarbeitung Programme mit vielen Aufrufen von append/3 sehr schnell ineffizient werden können. Man sollte also bei der Verwendung von append/3 in rekursiven Prädikaten vorsichtig sein. Übung Petersen Prolog: Kapitel 6 8
9 Suffixe, Präfixe und allgemeine Sublisten: prefix/2, suffix/2, sublist/2 Das Prädikat append/3 kann für die Definition von Sublisten eingesetzt werden: Präfixe der Liste [a,b,c,d]: [],[a],[a,b],[a,b,c],[a,b,c,d] prefix(p,l) :- append(p,_,l). Suffixe der Liste [a,b,c,d]: [],[d],[c,d],[b,c,d],[a,b,c,d] suffix(s,l) :- append(_,s,l). Sublisten der Liste [a,b,c]: [],[a],[a,b],[a,b,c],[b],[b,c],[c] sublist(sl, L) :- prefix(p,l), suffix(sl,p). L Übung
10 Suffixe, Präfixe und allgemeine Sublisten: prefix/2, suffix/2, sublist/2 Das Prädikat append/3 kann für die Definition von Sublisten eingesetzt werden: Präfixe der Liste [a,b,c,d]: [],[a],[a,b],[a,b,c],[a,b,c,d] prefix(p,l) :- append(p,_,l). Suffixe der Liste [a,b,c,d]: [],[d],[c,d],[b,c,d],[a,b,c,d] suffix(s,l) :- append(_,s,l). Sublisten der Liste [a,b,c]: [],[a],[a,b],[a,b,c],[b],[b,c],[c] sublist(sl, L) :- prefix(p,l), suffix(sl,p). P L Übung
11 Suffixe, Präfixe und allgemeine Sublisten: prefix/2, suffix/2, sublist/2 Das Prädikat append/3 kann für die Definition von Sublisten eingesetzt werden: Präfixe der Liste [a,b,c,d]: [],[a],[a,b],[a,b,c],[a,b,c,d] prefix(p,l) :- append(p,_,l). Suffixe der Liste [a,b,c,d]: [],[d],[c,d],[b,c,d],[a,b,c,d] suffix(s,l) :- append(_,s,l). Sublisten der Liste [a,b,c]: [],[a],[a,b],[a,b,c],[b],[b,c],[c] sublist(sl, L) :- prefix(p,l), suffix(sl,p). P SL L Übung Petersen Prolog: Kapitel 6 9
12 Löschen eines Elements: delete/3 % delete/3 % delete(term,liste1,liste2) delete(x,[x T],T). delete(x,[h T1],[H T2]):- delete(x,t1,t2). delete/3 setzt einen Term und zwei Listen derart in Beziehung, daß Liste2 das Ergebnis des einmaligen Löschens von Term an einer beliebigen Position in Liste1 repräsentiert.?- delete(b,[a,b,c],[a,c]). true.?- delete(c,[a,b,c],x). X=[a,b]?- delete(x,[a,b,c,d],[a,b,d]). X = c?- delete(1,x,[a,b,c]). X = [1, a, b, c] ; X = [a, 1, b, c] ; X = [a, b, 1, c] ; X = [a, b, c, 1]. Übung: deleteall/3 Übung: permute/2 Petersen Prolog: Kapitel 6 10
13 Umdrehen von Listen: naiverev/2 (naive Definition) Zwei Listen sind zueinander revers, wenn die eine Liste gleich der anderen ist, wenn man die Reihenfolge der Elemente umdreht. naiverev([],[]). naiverev([h T],R) :- naiverev(t,revt), append(revt,[h],r). Deklarative Idee: Die Umkehrung einer nichtleeren Liste [H T] ergibt sich, indem man an die Umkehrung von T eine Liste mit dem Kopf H als einzigem Element konkateniert.?- naiverev([a,b,c],[c,b,a]). true.?-naiverev([1,[2,3]],x). X=[[2,3],1].?-naiverev(X,[a,b,c]). X=[c,b,a].?-naiverev([],X). X=[]. Petersen Prolog: Kapitel 6 11
14 Warum naives reverse? Das naive naiverev/2 wird naiv genannt, weil das zu lösende Problem eigentlich mit linearer Laufzeit gelöst werden könnte. Das naive naiverev/2 benötigt jedoch durch den Einsatz von append/3 kubische Laufzeit. Betrachte den Trace von naiverev([a,b,c,d],x). Petersen Prolog: Kapitel 6 12
15 reverse/2 mit Akkumulator % reverse/2 % reverse(liste,umgekehrteliste) reverse(l,rl):- reverse(l,[],rl). % reverse/3 % reverse(liste,akkumulator,umgekehrteliste) reverse([],rl,rl). reverse([h T],RT,RL):- reverse(t,[h RT],RL). Deklarative Idee: Die Elemente der ersten Liste werden nacheinander auf einen neuen Stapel gelegt (den Akkumulator, der als leere Liste startet). In jedem Schritt schrumpft die erste Liste und wächst der Akkumulator um ein Element. Die Elemente aus der ersten Liste geraten im Akkumulator in umgekehrte Reihenfolge (das erste Element kommt als erstes in den Akkumulator und damit an dessen letzten Platz). Wenn die erste Liste leer ist, liefert der Akkumulator das Ergebnis. Petersen Prolog: Kapitel 6 13
16 reverse/2 prozedural?- reverse([a,b,c,d],x). Call : (7) reverse([a,b,c,d], _G2273)? Call : (8) reverse([a,b,c,d],[], _G2273)? Call : (9) reverse( [b,c,d],[a], _G2273)? Call : (10) reverse( [c,d],[b,a], _G2273)? Call : (11) reverse( [d],[c,b,a], _G2273)? Call : (12) reverse( [],[d,c,b,a], _G2273)? Exit : (12) reverse( [],[d,c,b,a],[d,c,b,a])? Exit : (11) reverse( [d],[c,b,a], [d,c,b,a])? Exit : (10) reverse( [c,d],[b,a], [d,c,b,a])? Exit : (9) reverse( [b,c,d],[a], [d,c,b,a])? Exit : (8) reverse([a,b,c,d],[], [d,c,b,a])? Exit : (7) reverse([a,b,c,d], [d,c,b,a])? X = [d,c,b,a] Übung Petersen Prolog: Kapitel 6 14
17 Listenverarbeitung mit Akkumulatorliste Tail des Akkumulators steht im Kopf der Regel; Zerlegung der Akkumulatorliste erfolgt im rekursiven Aufruf; Akkumulatorliste wird mit Rekursion länger. p(...[h T],TAcc,...):-..., p(...,t,[h TAcc],...),... Petersen Prolog: Kapitel 6 15
18 Differenzlisten Listen können auch als Differenzlisten repräsentiert werden: Eine Differenzliste ist ein Paar von Listen (L1,L2), wobei L2 ein Suffix von L1 repräsentiert. Die Elemente der Differenzliste sind die nach Abzug von Suffix L2 verbleibenden Elemente in L1. Differenzliste gewöhnliche Liste ([E1,...,En T],T) [E1,...,En] (L,[]) L (L,L) [] Petersen Prolog: Kapitel 6 16
19 Beispiel: [1,2,3] als Differenzliste Für jede gewöhnliche Liste gibt es unendlich viele Darstellungen als Differenzliste: % [1,2,3] als Differenzliste: ([1,2,3],[]) ([1,2,3,4],[4]) ([1,2,3,4,5],[4,5]) ([1,2,3,4,5,6],[4,5,6]) ([1,2,3,4,5,6,7],[4,5,6,7])... ([1,2,3 T],T) ([1,2,3,a T],[a T]) ([1,2,3,a,b T],[a,b T])... Petersen Prolog: Kapitel 6 17
20 Vorteil von Differenzlisten: Konkatenation in einem Schritt Differenzlisten können in einem Schritt konkateniert werden: % append_dl/3 % append_dl(difflist1, DiffList2, DiffList3) append_dl((a,b),(b,c),(a,c)). Petersen Prolog: Kapitel 6 18
21 Vorteil von Differenzlisten: Konkatenation in einem Schritt Differenzlisten können in einem Schritt konkateniert werden: % append_dl/3 % append_dl(difflist1, DiffList2, DiffList3) append_dl((a,b),(b,c),(a,c)). A B (A,B) Petersen Prolog: Kapitel 6 18
22 Vorteil von Differenzlisten: Konkatenation in einem Schritt Differenzlisten können in einem Schritt konkateniert werden: % append_dl/3 % append_dl(difflist1, DiffList2, DiffList3) append_dl((a,b),(b,c),(a,c)). B C (B,C) Petersen Prolog: Kapitel 6 18
23 Vorteil von Differenzlisten: Konkatenation in einem Schritt Differenzlisten können in einem Schritt konkateniert werden: % append_dl/3 % append_dl(difflist1, DiffList2, DiffList3) append_dl((a,b),(b,c),(a,c)). A C (A,C) Petersen Prolog: Kapitel 6 18
24 Vorteil von Differenzlisten: Konkatenation in einem Schritt Differenzlisten können in einem Schritt konkateniert werden: % append_dl/3 % append_dl(difflist1, DiffList2, DiffList3) append_dl((a,b),(b,c),(a,c)). A B C (A,B) (A,C) (B,C) Petersen Prolog: Kapitel 6 18
25 Vorteil von Differenzlisten: Konkatenation in einem Schritt Differenzlisten können in einem Schritt konkateniert werden: % append_dl/3 % append_dl(difflist1, DiffList2, DiffList3) append_dl((a,b),(b,c),(a,c)). Petersen Prolog: Kapitel 6 19
26 Vorteil von Differenzlisten: Konkatenation in einem Schritt Differenzlisten können in einem Schritt konkateniert werden: % append_dl/3 % append_dl(difflist1, DiffList2, DiffList3) append_dl((a,b),(b,c),(a,c)). Arbeitsweise von append_dl/3:?- D1 = ([1,2,3 T1],T1), D2 = ([4,5,6 T2],T2), append_dl(d1,d2,d3). D3 = ([1,2,3,4,5,6 T2],T2) Petersen Prolog: Kapitel 6 19
27 Vorteil von Differenzlisten: Konkatenation in einem Schritt Differenzlisten können in einem Schritt konkateniert werden: % append_dl/3 % append_dl(difflist1, DiffList2, DiffList3) append_dl((a,b),(b,c),(a,c)). Arbeitsweise von append_dl/3:?- D1 = ([1,2,3 T1],T1), D2 = ([4,5,6 T2],T2), append_dl(d1,d2,d3). D3 = ([1,2,3,4,5,6 T2],T2)?- append_dl( D1, D2, D3 ).?- append_dl(([1,2,3 T1],T1),([4,5,6 T2],T2), D3 ). append_dl(( A, B),( B, C),(A,C)). A = [1,2,3 T1] B = T1 = [4,5,6 T2] C = T2 => A = [1,2,3 [4,5,6 T2 ]] = [1,2,3,4,5,6 T2] => D3 = (A,C) = ([1,2,3,4,5,6 T2],T2) Petersen Prolog: Kapitel 6 19
28 Zusammenfassung Kapitel 6 Wir haben die zentralen Listenprädikate append/3, delete/3 und reverse/2 kennengelernt. Wir haben gelernt, Akkumulatoren für Listenelemente zu verwenden, um effizienter Prädikate zu definieren. Wir haben Differenzlisten eingeführt, die die Konkatenation von Listen in einem Schritt ermöglichen. Keywords: append/3, delete/3, reverse/2, Akkumulatorlisten, Differenzlisten. Wichtig: Rekursive Prädikatsaufrufe sind ineffizient und sollten auf ein Minimum beschränkt werden (vgl. naiverev/2 mit reverse/2 und append/3 mit append_dl/3). Ausblick Kapitel 7: Definite Clause Grammars (DCG s) Petersen Prolog: Kapitel 6 20
29 Übung: Grammatik mit append/3 % Grammatikregeln: s(l3):- np(l1), vp(l2), append(l1,l2,l3). np(l3):- det(l1), n(l2), append(l1,l2,l3). vp(l3):- v(l1), np(l2), append(l1,l2,l3). % 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? Betrachten Sie die folgende Anfrage im Tracemodus:?- s([keine, katze, klaut, eine, maus]). Fällt ihnen eine Möglichkeit ein, die Prädikate für die Grammatikregeln effizienter zu definieren? (Tipp: Es reicht, die Teilziele umzustellen.) Petersen Prolog: Kapitel 6 21
30 Übung: Listenprädikate mit append/3 1 Überlegen Sie sich eine alternative Definition für sublist/2. 2 Schreiben Sie ein Prädikat swapfl/2, das zwei Listen akzeptiert, wenn die eine aus der anderen durch Vertauschen des ersten und des letzten Elements hervorgeht:?- swapfl([a,b,c,d],[d,b,c,a]). true. Funktioniert ihr Prädikat für Listen aller Längen? Müssen die Argumente instantiiert sein? zurück Petersen Prolog: Kapitel 6 22
31 Übung: deleteall/3 Schreiben Sie ein Prädikat deleteall/3, das alle Vorkommen eines Elements aus einer Liste löscht:?- deleteall(b,[a,b,c,d],[a,c,d]). true.?- deleteall(1,[1,2,1,2,3,1,2,3,4],[2,2,3,2,3,4]). true.?- deleteall(1,[a,b,c],[a,b,c]). true.?- deleteall(1,[1,1,1,1],[]). true. Wie verhält sich ihr Prädikat, wenn sie es mit Variablen an den verschiedenen Argumentpositionen aufrufen? zurück Petersen Prolog: Kapitel 6 23
32 Übung: delete_sublist/3 Schreiben Sie ein Prädikat delete_sublist/3, das drei Listen als Argumente nimmt und gelingt, wenn die dritte Liste das Resultat ist, das man erhält, wenn man alle Vorkommen von Elementen der ersten Liste aus der zweiten Liste löscht.?-delete_sublist([a,b],[b,a,c,a,b,d],[c,d]). true.?-delete_sublist([],[c,d],[c,d]). true.?-delete_sublist([a,b],[],[]). true.?-delete_sublist([a,b,c],[a,b,c,d],x). X=[d]. Petersen Prolog: Kapitel 6 24
33 Übung: permute/2 (Zusatzaufgabe) Schreiben Sie ein Prädikat permute/2, das zwei Listen akzeptiert, wenn die eine Liste aus der anderen durch Permutation der Elemente hervorgeht:?- permute([a,b,c,d],[c,d,a,b]). true.?- permute([a,b,c],x). X = [a, b, c] ; X = [a, c, b] ; X = [b, a, c] ; X = [b, c, a] ; X = [c, b, a] ; X = [c, a, b] ; false. zurück Petersen Prolog: Kapitel 6 25
34 Übung: Palindrome und Wiederholwörter 1 Schreiben Sie ein Prädikat palindrom/2, das Palindrome erkennt. Ein Wort ist ein Palindrom, wenn es von vorne und von hinten gelesen gleich ist.?- palindrom([a,b,c,b,a]). true. 2 Schreiben Sie ein Prädikat wiederhol/2, das Wiederholwörter erkennt. Ein Wort ist ein Wiederholwort, wenn es aus genau zwei gleichen Teilen besteht.?- wiederhol([a,b,c,a,b,c]). true. zurück Petersen Prolog: Kapitel 6 26
35 Übung: Verflachung von Listen Schreiben Sie ein Prädikat flatten/2, das als Argumente zwei Listen nimmt und gelingt, wenn die zweite Liste die Verflachung der ersten Liste ist:?- flatten([a,b,[c,d]],[a,b,c,d]). true.?- flatten([[a,[b,[c,d]]]],[a,b,c,d]). true. Eventuell benötigen Sie das Prädikate is_list/1, das gelingt, wenn das Argument eine Liste ist, und das Prädikat not/1, das gelingt, wenn das Argument false liefert. Sie können das Prädikat \append/3 verwenden, auch wenn das nicht zu der effektivsten Lösung führt. Petersen Prolog: Kapitel 6 27
36 Übung: Parser [Zusatzaufgabe] Auf der letzten Folie von Foliensatz 4 finden Sie eine Grammatik, mit der Sie Ableitungsbäume auf ihre Wohlgeformtheit testen können. Hier im Kapitel 6 haben wir gesehen, wie wir das Prädikat append/3 in einer Grammatik zur Generierung von Sätzen einsetzen können. Verbinden Sie beide Ansätze zu einem Parser: Ziel ist ein zweistelliges Prädikat s/2, das gelingt, wenn das erste Argument ein grammatischer Satz in Form einer Wortliste ist und das zweite der Ableitungsbaum dieses Satzes:?- s([eine, maus, jagt, viele, katzen], s(np(d(eine), n(maus)), vp(v(jagt), np(d(viele), n(katzen))))). true. Petersen Prolog: Kapitel 6 28
37 Übung: Logikrätsel (1) [Zusatzaufgabe] Gegeben folgende Situation: In einer Straße stehen drei Häuser mit den Hausnummern 1, 2 und 3. Es gibt ein rotes, ein blaues und ein grünes Haus. In der Straße wohnt ein Engländer, eine Japanerin und eine Spanierin. In jedem Hau gibt es ein Haustier: eine Schnecke, ein Jaguar und einen Wolf. In dem roten Haus wohnt ein Engländer. Die Spanierin hält einen Jaguar. Die Japanerin wohnt rechts neben dem Haus, in dem die Schnecke gehalten wird. Die Schnecke lebt in dem Haus links vom blauen Haus. Modellieren Sie diese Situation in Prolog und schreiben Sie ein Prädikat, mit dem sie herausfinden können, wer in welchem Haus, welcher Farbe mit welchem Tier lebt. Gibt es mehr als eine Lösung? Denken Sie sich eine zusätzliche Bedingung aus, so dass die Lösung eindeutig wird. Tipp: Mithilfe von permute/2 können Sie sich potentielle Hausbelegungen erzeugen, die Sie dann daraufhin überprüfen können, ob sie die angegebenen Bedingungen erfüllen. Petersen Prolog: Kapitel 6 29
38 Übung: Logikrätsel (2) [Zusatzaufgabe] Anna, Bert, Carla und Dang haben die Plätze 1-4 nebeneinander für einen Überraschungsfilm im Kino reserviert. Überlegen Sie sich ein Logikrätsel analog zu dem von der vorherigen Folie, das genau eine Lösung hat. Versuchen sie das Rätsel möglichst schwer zu machen, reduzieren sie dazu die Zahl der Hinweise so weit wie möglich. Die Tabelle unten gibt die Informationen an, die über die Personen aus ihrem Rätsel geschlossen werden sollen. Platznummer Name Anna Bert Carla Dang Genre Horror Liebe Krimi Doku Snack Popcorn Chips Gummibärchen Reis Merkmal Hut Brille Mütze Schal Petersen Prolog: Kapitel 6 30
39 Bearbeiten Sie auch die Aufgaben der Practical Session zu Kapitel 6 aus Learn Prolog Now! (Übungssitzung). Petersen Prolog: Kapitel 6 31
Logische und funktionale Programmierung
Logische und funktionale Programmierung Vorlesung 8: Arithmetik, Listenprädikate, weitere Prolog Prädikate Babeş-Bolyai Universität, Department für Informatik, Cluj-Napoca [email protected] 1/67 ARITHMETIK
Prolog 4. Kapitel: Listen
Prolog 4. Kapitel: Listen Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Petersen Prolog: Kapitel 4 1 Zusammenfassung Kapitel 3 Wir haben gelernt, dass die Rekursion
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
Prolog 10. Kapitel: Cut und Negation
Zusammenfassung Kapitel 9 Prolog 10. Kapitel: Cut und Negation Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Wir haben verschiedene Prädikate zur Analyse von zusammengesetzten
Prolog 3. Kapitel: Rekursion
Zusammenfassung: Kapitel 2 Prolog 3. Kapitel: Rekursion Wir haben gelernt wie komplexe Strukturen durch Matching in Prolog aufgebaut werden können und wie die Beweisführung in Prolog funktioniert. Dozentin:
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
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,
Übung zu Grundlagen der Logik und Logik-Programmierung
Übung zu Grundlagen der Logik und Logik-Programmierung Übungsblatt 4 (5.Übung) Florian Wittmann Uni Erlangen, Informatik 8 Inhalt 1 Aufgabe 4-1: Tiefensuche 2 Aufgabe 4-2: Listen in Prolog 3 Aufgabe 4-3:
Rekursive Programmiertechniken. Einfachste Rekursion mit Babuschka. Hyponymie: Unterbegriffshierarchie. Linksrekursion mit Babuschka
Rekursive Programmiertechniken Einfachste Rekursion mit Babuschka Übersicht Linksrekursion Transitive Relationen berechnen Hierarchische Beziehungen: Hyponymie Dekomposition eines (von mehreren) Arguments
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
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
Rekursive Listenverarbeitung
Rekursive Listenverarbeitung Übersicht Rekursion ist die wichtigste Programmiertechnik in Prolog! Rekursive Datenstrukturen Einfache und rekursiv gebildete Strukturen Rekursive Datenstrukturen und rekursive
Reihenfolge von Klauseln
Reihenfolge von Klauseln Bei der Programmierung in Prolog steht grundsätzlich die Repräsentation logischer Zusammenhänge im Vordergrund. Nichtsdestotrotz ist es unvermeidbar, die Mechanismen der Abarbeitung
Prolog 2. Kapitel: Matching und Beweisführung
Prolog 2. Kapitel: Matching und Beweisführung Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Petersen Prolog: Kapitel 2 1 Zusammenfassung: Kapitel 1 Wir haben die
Prolog 2. Kapitel: Matching und Beweisführung
Zusammenfassung: Kapitel 1 Prolog 2. Kapitel: Matching und Beweisführung Dozentin: Wiebke Petersen Kursgrundlage: Learn Prolog Now (Blackburn, Bos, Striegnitz) Wir haben die Grundlagen und Anwendungsgebiete
Kapitel 12: Induktive
Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter
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
Prolog: Listen und Cut. Mark Ugarov
Prolog: Listen und Cut Mark Ugarov Übersicht Wiederholung und Anwendung Wie nutzt man? Listen Cut Anwendungsbeispiele immer parallel Wiederholung: Aufruf von Prolog-Programmen Notwendige Software: SWI
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
Einführung in PROLOG 7 Kontextfreie Grammatiken
Einführung in PROLOG 7 Kontextfreie Grammatiken Der Erschaffer von PROLOG, Alain Colmerauer, war ein Computer-Linguist. Daher ist die Computer-Linguistik immer noch das klassische Anwendungsfeld von PROLOG.
Tutoraufgabe 1 (Programmieren in Prolog):
Prof. aa Dr. J. Giesl S. Dollase, M. Hark, D. Korzeniewski Tutoraufgabe 1 (Programmieren in Prolog): In dieser Aufgabe sollen einige Abhängigkeiten im Übungsbetrieb Programmierung in Prolog modelliert
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
Übungsblatt 10. Thema: Abstrakte Datentypen, Datenstrukturen in Java
Informatik I WS 05/06 Prof. Dr. W. May Dipl.-Inform. Oliver Fritzen Dipl.-Inform. Christian Kubczak Übungsblatt 10 Ausgegeben am: Abgabe bis: 13.01.2006 24.1.2006 (Theorie) 27.1.2006 (Praktisch) Thema:
PROLOG Syntax. Einführung in PROLOG II. Atome. Variablen. Es gibt vier Arten von Termen: Atome. Zahlen. Variablen. Komplexe Terme
PROLOG Syntax Es gibt vier Arten von Termen: Atome Variablen Atome Zahlen Variablen Komplexe Terme 1. uni, uni_hannover 2. KI Kurs, $ % 45 3. @=, ====> 1. X, Y 2. Variable, Output 3. _tag, _head 4. X_256
Musterlösung zur 2. Aufgabe der 4. Übung
Musterlösung zur 2. Aufgabe der 4. Übung Da viele von Euch anscheinend noch Probleme mit dem Entfalten haben, gibt es für diese Aufgabe eine Beispiellösung von uns. Als erstes wollen wir uns noch einmal
Tutorium Prolog für Linguisten 12
Tutorium Prolog für Linguisten 12 Sebastian Golly 29. Januar 2013 Sebastian Golly Tutorium Prolog für Linguisten 12 1 / 13 Plan für heute Fürs Langzeitgedächtnis Zusammenfassung des letzten Seminars Übungsblatt
Übung 4: Aufgaben in Prolog: Aufgaben trenne(+eingabeliste, -ZahlenListe, -NichtzahlenListe)
Intelligente Agenten SS 2007 Prof. Dr. Heiner Klocke Übung 4: Aufgaben in Prolog: Aufgaben 7-10 05.07.2007 Aufgabe 7 ( trenne ) Schreiben Sie ein Programm trenne(+eingabeliste, -ZahlenListe, -NichtzahlenListe)
Terme. Heute: Terme vergleichen. Struktur von Termen. Operatoren. Logik in der Praxis Logikprogrammierung (Prolog) p.1
Terme Heute: Terme vergleichen Struktur von Termen Operatoren Logik in der Praxis Logikprogrammierung (Prolog) p.1 Termgleichheit: ==?- a == a.?- a == b. no?- X == Y. no?- X == X.?- X == a. no Logik in
DCG II. Heute: DCGs mit extra Argumenten. DCGs mit Agreementmerkmalen. Parsebäume. Extra Tests. Programmierkurs Prolog p.1
DCG II Heute: DCGs mit extra Argumenten DCGs mit Agreementmerkmalen Parsebäume Extra Tests Programmierkurs Prolog p.1 Extra Argumente Beispiele: x - - y. s - - np, vp. x(foo, ba) - - y. s(f) - - np, vp.
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -
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
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -
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
Künstliche Intelligenz Einführung in Prolog
Künstliche Intelligenz Einführung in Prolog Stephan Schwiebert WS 2009/2010 Sprachliche Informationsverarbeitung Institut für Linguistik versität zu Köln Backtracking Backtracking uninformiertes, universelles
Vorlesung Datenstrukturen
Vorlesung Datenstrukturen Graphen (1) Darstellung Traversierung Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 441 Generalisierung von Bäumen Verallgemeinerung (von Listen zu Graphen)
THIA - Übungsblatt 2.
THIA - Übungsblatt 2. Aufgabe 12 (Eine einfache Sprache). Endliche Ziffernfolgen, die mit einer 0 beginnen, auf die mindestens eine weitere Ziffer folgt, wobei nur die Ziffern 0,..., 7 vorkommen, sollen
2: Restklassen 2.1: Modulare Arithmetik
2: Restklassen 2.1: Modulare Arithmetik Uhr: Stunden mod 24, Minuten mod 60, Sekunden mod 60,... Rechnerarithmetik: mod 2 w, w {8, 16, 32, 64} Prüfziffern mod 10 oder mod 11... 71 S. Lucks Diskr Strukt.
Einführung in die Computerlinguistik
Einführung in die Computerlinguistik Kontextfreie Sprachen und Pushdown-Automaten Dozentin: Wiebke Petersen WS 2004/2005 Wiebke Petersen Formale Komplexität natürlicher Sprachen WS 03/04 Wiederholung c
ÜBUNGS-BLOCK 7 LÖSUNGEN
ÜBUNGS-BLOCK 7 LÖSUNGEN Aufgabe 1: Gegeben ist folgender Code: Auto[] array = new Auto[3]; // Alle Autos im Array tunen: for (int i = 1; i
Rekursion. rekursive Prädikate. deklarative vs. prozedurale Bedeutung von Prädikaten. Programmierkurs Prolog p.1
Rekursion rekursive Prädikate deklarative vs. prozedurale Bedeutung von Prädikaten Programmierkurs Prolog p.1 is digesting/2 is digesting(x,y) :- just ate(x,y). is digesting(x,y) :- just ate(x,z), is digesting(z,y).
Teil XI.3. Rekursive Regeln
Teil XI.3 Rekursive Regeln 1 Beispiel Fakten: elternteil(heike, robert). elternteil(thomas, robert). elternteil(thomas, lisa). elternteil(robert, anna). elternteil(robert, petra). elternteil(petra, jakob).?-
2 Logikprogrammierung am Beispiel Prolog
2 Logikprogrammierung am Beispiel Prolog 2.1 Logikprogrammierung mit einfachen Daten 2.2 Variablenumbenennung 2.3 Syntax 2.4 Komplexe Daten 2.5 Der Cut 2.6 Negation als Fehlschlag 2.7 Literaturhinweise
Das Halteproblem für Turingmaschinen
Das Halteproblem für Turingmaschinen Das Halteproblem für Turingmaschinen ist definiert als die Sprache H := { T w : T ist eine TM, die bei Eingabe w {0, 1} hält }. Behauptung: H {0, 1} ist nicht entscheidbar.
Tutorium Prolog für Linguisten 8
Endliche Automaten Tutorium Prolog für Linguisten 8 Sebastian Golly 18. Dezember 2012 Sebastian Golly Tutorium Prolog für Linguisten 8 1 / 13 Endliche Automaten Plan für heute? Sebastian Golly Tutorium
// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String
// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String tostring() { String result = "["+info; for(list t=next;
Arbeiten mit der Shell Teil 1
Arbeiten mit der Shell Teil 1 Linux-Kurs der Unix-AG Zinching Dang 2. Mai 2017 Übersicht Wiederholung & Vertiefung Die Unix-Philosophie Shellbefehle Befehle & Optionen Zusammenfassung & Ausblick Tux im
FORMALE SYSTEME. Der Satz von Myhill und Nerode. Automaten verkleinern mit Quotientenbildung. Verschiedene Äquivalenzrelationen
Automaten verkleinern mit Quotientenbildung Wir betrachten DFAs mit totaler Übergangsfunktion. FORMALE SYSTEME 9. Vorlesung: Minimale Automaten (2) Markus Krötzsch TU Dresden, 9. November 207 C 0 A 0 [A]
Inhalt Kapitel 2: Rekursion
Inhalt Kapitel 2: Rekursion 1 Beispiele und Definition 2 Partialität und Terminierung 3 Formen der Rekursion Endständige Rekursion 4 Einbettung 29 Beispiele und Definition Rekursion 30 Man kann eine Funktion
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
5.3 Doppelt verkettete Listen
5.3 Doppelt verkettete Listen Einfach verkettete Listen unterstützen das Einfügen und Löschen am Anfang in konstanter Zeit; für das Einfügen und Löschen am Ende benötigen sie jedoch lineare Laufzeit Doppelt
...imbeispiel: Die Konkatenation der Blätter des Ableitungsbaums t bezeichnen wir auch mit yield(t). liefert die Konkatenation: name int + int.
Die Konkatenation der Blätter des Ableitungsbaums t bezeichnen wir auch mit yield(t)....imbeispiel: E 0 E 1 + T 1 T 0 F 2 T 1 F 2 int F 1 int name liefert die Konkatenation: name int + int. 273 Die Grammatik
Formale Methoden 1. Gerhard Jäger 28. November Uni Bielefeld, WS 2007/2008 1/15
1/15 Formale Methoden 1 Gerhard Jäger [email protected] Uni Bielefeld, WS 2007/2008 28. November 2007 2/15 Formale Sprache: Menge von Symbolketten Theorie formaler Sprachen Formale Sprachen
Theoretische Informatik. Alphabete, Worte, Sprachen
Theoretische Informatik Alphabete, Worte, Sprachen Alphabete, Worte, Sprachen 1. Alphabete und Worte Definitionen, Beispiele Operationen mit Worten Induktionsbeweise 2. Sprachen Definition und Beispiele
1. Die rekursive Datenstruktur Liste
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel Ein Stack, auch Stapel oder Keller genannt, ist eine Datenstruktur, bei der die Elemente nur an einem Ende der Folge eingefügt bzw. gelöscht
Die Nerode-Relation und der Index einer Sprache L
Die Nerode-Relation und der Index einer Sprache L Eine zweite zentrale Idee: Sei A ein vollständiger DFA für die Sprache L. Repäsentiere einen beliebigen Zustand p von A durch die Worte in Σ, die zu p
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
Sei Σ ein endliches Alphabet. Eine Sprache L Σ ist genau dann regulär, wenn sie von einem regulären Ausdruck beschrieben werden kann.
Der Satz von Kleene Wir haben somit Folgendes bewiesen: Der Satz von Kleene Sei Σ ein endliches Alphabet. Eine Sprache L Σ ist genau dann regulär, wenn sie von einem regulären Ausdruck beschrieben werden
Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper
Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen Sebastian Küpper Unzulänglichkeit von Feldern Wenn ein Unternehmen alle Rechnungen eines Jahres verwalten möchte,
Einführung in die Computerlinguistik formale Sprachen
Einführung in die Computerlinguistik formale Sprachen Dozentin: Wiebke Petersen 29.10.2009 Wiebke Petersen Einführung CL (WiSe 09/10) 1 Wiebke Petersen Einführung CL (WiSe 09/10) 2 Wiebke Petersen Einführung
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
Kapitel 3: Variablen
Kapitel 3: Variablen Thema: Programmieren Seite: 1 Kapitel 3: Variablen Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber
Formale Grundlagen 2008W. Vorlesung im 2008S Institut für Algebra Johannes Kepler Universität Linz
Formale Grundlagen Institut für Algebra Johannes Kepler Universität Linz Vorlesung im 2008S http://www.algebra.uni-linz.ac.at/students/win/fg Inhalt Definition Sei A eine Menge und ɛ A A A eine zweistellige
Künstliche Intelligenz
Künstliche Intelligenz Prolog - Definite Clause Grammar Claes Neuefeind Sprachliche Informationsverarbeitung Universität zu Köln 25. Januar 2012 Wiederholung: DCGs Parser, Kongruenz, Semantik Praxis Hausaufgaben
Mathematische Grundlagen der Computerlinguistik
kartesische Produkte und und Funktionen (Teil I) Centrum für Informations- und Sprachverarbeitung (CIS) 2. Juni 2014 Table of Contents kartesische Produkte und 1 kartesische Produkte und 2 Darstellung
