Listen [mia, vincent, jules, yolanda] [mia, robber(honey_bunny), X, 2, mia] [] [mia, [vincent, jules], [butch, girlfriend(butch)]] [[], dead(zed), [2,

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in Prolog Copyright © 1999 by Michael Neumann
Advertisements

Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Eine dynamische Menge, die diese Operationen unterstützt,
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
6. Regelbasierte Systeme
M a r c – o l i v e r p a h l Informatik II – Kapitel 14 Hashing Zusammenfassung des Kapitel 14 Küchlin, Weber, Einführung in die Informatik, 2.Auflage.
Sortieren I - Bubblesort -
Prof. Dr. W. Conen 15. November 2004
Zusammenfassung der Vorwoche
Programmieren in Logik
Kapitel 6. Suchverfahren
Finale Semantik und beobachtbares Verhalten
Seminar Stochastik im WS 02/03
Rekursion Was ist Rekursion? Was sind rekursive Methoden?
Listen & Beweisstrategie
Rekursive Listenverarbeitung
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Polymorphie (Vielgestaltigkeit)
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Semantik von Prolog & Unifikation
Verschachtelte Listen, Differenzlisten, Graphen
Syntax von Prolog & Familiendatenbasis
Fakten, Regeln und Anfragen
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
6 Folgen (Teil II - Datenstrukturen und Algorithmen)
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Zusammenfassung Vorwoche
Günter Kniesel Advanced Prolog. 2 Bisher: Grundlagen Klauseln –Regeln –Fakten Terme –Die einzige Datenstruktur in Prolog –Listen als Sonderfall mit eigener.
Die Methode public Knoten einfuegenVor (Datenelement dNeu, Datenelement dVergleich) public Knoten einfuegenVor(Datenelement dNeu, Datenelement dVergleich){
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Java programmieren mit JavaKara
Rechnen mit Prozenten Klasse 7c – Schuljahr 2013/2014.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Rekursion mit Listen: Quicksort
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Multiplikation von Summen
3, , , ,4 = ??.
Informatik 1 Letzte Übung.
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
1.6 Die Datenstruktur Stapel Ein Stapel (Stack) ist ein Sonderfall einer Liste. Die Elemente werden nach dem Prinzip LIFO (Last In First Out) angefügt.
Dynamische Datentypen
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Algorithmen und Datenstrukturen Übungsmodul 8
Dynamische Webseiten-Generierung
Übung 4.1 Strukturierte Datentypen
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
SFZ FN Sj. 13/14 Python 3 Rekursion Inf K1/2 Sj 13/14
Informatik Formale Sprachen 1.2 Grammatiken formaler Sprachen
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
Anwenden von Funktionen im EXCEL Anwenden von Funktionen im EXCEL © Walter Riedle, Computeria-Urdorf, 2008 Funktionen sind Prozesse (= Programme), die.
Geoinformation3 Geoinformation III XML Grundlagen und Dokumentspezifikation Vorlesung 12b.
Syntax, Semantik, Spezifikation - Grundlagen der Informatik R. Hartwig Kapitel 3 / 1 Algebraische Hülle und Homomorphie A = [A, F ] sei  -Algebra. Eine.
Prof. Dr. Herbert Göttler, Dr. Peter Dauscher Johannes Gutenberg-Universität, Mainz Einführung in die Funktionsweise von.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1.
Tutorium Software-Engineering SS14 Florian Manghofer.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
Implementieren von Klassen
 Präsentation transkript:

Listen [mia, vincent, jules, yolanda] [mia, robber(honey_bunny), X, 2, mia] [] [mia, [vincent, jules], [butch, girlfriend(butch)]] [[], dead(zed), [2, [b, chopper]], [], Z, [2, [b, chopper]]]] Die Elemente stehen, von Kommas getrennt in eckigen Klammer. Die Länge der ersten Liste (Anzahl der Elemente) beträgt 4. Alle Arten von PROLOG-Objekten können Listenelemente sein, und beliebig oft in einer Liste auftauchen. Es gibt die leere Liste (Länge 0) Listen können wieder Elemente anderer Listen sein. Die Länge der 4. Liste ist 3!

Kopf | Rumpf Mit dem PROLOG-Operator | können wir die Listen mithilfe von matching in Kopf und Rumpf auftrennen: ?- [X|Y] = [mia, vincent, jules, yolanda]. X= mia Y=[ vincent, jules, yolanda] yes Oder die ersten zwei Elemente extrahieren: ?- [X,Y | W] = [[], dead(zed), [2, [b, chopper]], [], Z]. X= [] Y= dead(zed) W= [2, [b, chopper]], [], Z] Z= Z (PROLOG informiert uns auch, dass Z noch nicht gebunden wurde) yes Wenn uns nur das zweite und vierte Element interessieren: ?- [ _, X, _, Y | _ ] = [[], dead(zed), [2, [b, chopper]], [], Z]. X= dead(zed) Y= [] Z= Z yes

Member Übung: member soll überprüfen, ob X Teil einer Liste ist. member(X, [X | R]).

Member Übung: member soll überprüfen, ob X Teil einer Liste ist. member(X, [X | R]). member(X, [K | R]):- member(X, R). ?- member( jules, [mia, vincent, jules, yolanda]). yes Oder eine noch nützlichere Anwendung: ?- member(X, [mia, vincent, jules, yolanda]). X= mia ; X= vincent ; X= jules; X= yolanda; no Es bietet sich an, member noch etwas eindeutiger zu formulieren: member(X, [X | _]). member(X, [_ | R]):- member(X, R).

Maximum einer Liste Übung: maximum einer Liste finden. accMax( [], A, A).

Maximum einer Liste Übung: maximum einer Liste finden. accMax( [], A, A). accMax( [K | R], A, Max):- K > A, accMax( R, K, Max). accMax( [K | R], A, Max):- K =< A, accMax( R, A, Max).

Arithmetik Betrachten wir die PROLOG-eigenen Methoden zur Bearbeitung von ganzen Zahlen: ?- 8 is 6+2. oder auch ?- X is 9+2. Yes X=11 ?- 12 is 6*2. ?- X is 3*5. yes X=15 ?- -2 is 6-8. ?- X is 8-4. yes X=4 ?- 3 is 6/2. ?- X is 24/3. yes X=8 ?- 1 is mod(7,2). ?-X is mod(15,4). yes X=3 Beachte, dass: ?- X = 3+5. X= 3+5 yes ergibt.

Prinzip: Akkumulatoren Es geht darum, Zwischenergebnisse in Variablen zu speichern. Wir definieren uns akkLen/3 mit folgenden Argumenten: accLeng(List, Acc, Length) List und Length sind klar. In Acc speichern wir die Zwischenwerte der Länge. Am Anfang also 0, und wären wir rekursiv die Liste abarbeiten, zählen wir immer 1 dazu, wenn wir ein Kopfelement finden, bis wir auf die leere Liste stossen, dann entspricht Acc der Länge: accLeng( [], A, A). accLeng( [ _ | R ], A, L):- Anew is A+1, accLeng(R, Anew, L). Jetzt fehlt nur noch ein Prädikat, das arcLeng aufruft und Acc mit 0 initialisiert: leng(List, Length):- accLeng(List, 0, Length). Jetzt können wir also Queries aufrufen in der Form: ?- leng([a, b, c, d, e [a, b], g], X ).

Hinten anhängen hinten_anfuegen(Element, [], [Element]). hinten_anfuegen(Element, [Kopf|Rest], [Kopf|Neueliste]):- hinten_anfuegen(Element, Rest, Neueliste).

Listen zusammenfügen verkette([], Liste2, Liste2). verkette([K1|Rest1], Liste2, [K1|Neurest]):- verkette(Rest1, Liste2, Neurest).