Günter Kniesel Advanced Prolog. 2 Bisher: Grundlagen Klauseln –Regeln –Fakten Terme –Die einzige Datenstruktur in Prolog –Listen als Sonderfall mit eigener.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Programmieren in Logik
8. Termin Teil B: Wiederholung Begriffe Baum
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium
6. Regelbasierte Systeme
2. Programmstruktur – Teil 2
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Listen [mia, vincent, jules, yolanda] [mia, robber(honey_bunny), X, 2, mia] [] [mia, [vincent, jules], [butch, girlfriend(butch)]] [[], dead(zed), [2,
Parallel Prolog SS Seminar Programmiersprachenkonzepte Vortrag von Zehra Öztürk am 17. Juni 2004.
Objektorientierte Programmierung
Algorithmen und Komplexität
Listen & Beweisstrategie
Rekursive Listenverarbeitung
Cut, Negation, Manipulation der Datenbasis
Prolog und Prädikatenlogik I
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Baumstrukturen Richard Göbel.
Logische Programmierung: Prolog
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Union-Find-Strukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 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-
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Packages Vortrag : Cornelia Hardt 23. November 1999.
Einführung MySQL mit PHP
Der VFP Debugger - Coverage und Profiling. © 1999 TMN-Systemberatung GmbH Der VFP Debugger n Neues Aussehen, eigene Task n Erweiterte Möglichkeiten n.
Welche Funktion hat die php.ini? -Beinhaltet wichtige Einstellungen für PHP. Genannt seien hier u.a. der Speicherort von Cookies, Parameter der Kompilierung,
EXCEL PROFESSIONAL KURS
Eine Einführung in Prolog und die logische Programmierung
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Sortieralgorithmen Sortieren von Arrays.
Einführung in die Programmierung
Effiziente Algorithmen
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
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 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 Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmiersprache C 4
1.2 Trennung von Struktur und Inhalt
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.
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
ADAT©2004 Dipl. - Ing. Walter SabinSeite: 1 Version 1.0a Einführung in Reguläre Ausdrücke.
Einführung in PROLOG StD G. Noll f ( x ) f ( ) g ( ) g ( x ) barbara
Algorithmen und Datenstrukturen Übungsmodul 8
Integritätserhaltung und -Überprüfung in deduktiven Datenbanken
Stoppen der Eingabeaufforderung einer Abfrage j drücken Sie dann F5, oder klicken Sie auf Bildschirmpräsentation > Von Beginn an, um den Kurs zu starten.
SFZ FN Sj. 13/14 Python 3 Rekursion Inf K1/2 Sj 13/14
11. Wissenbasis und Regelsysteme Sebastian Linek.
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

Günter Kniesel Advanced Prolog

2 Bisher: Grundlagen Klauseln –Regeln –Fakten Terme –Die einzige Datenstruktur in Prolog –Listen als Sonderfall mit eigener Syntax Unifikation –Terme gleich machen Inferenz –Anfragen beantworten Rekursion Backtracking –Alle Ergebnisse finden

3 Prolog-Suchstrategie Klauseln –Top-down Literale im Klausel-Rumpf –Left to right Achtung bei Rekursion –Rekursive Klauseln immer hinter nach den Abbruchbedingungen –Rekursiver Aufruf möglichst am Ende einer Klausel (tail recursion) Terminierung Effizienz (Tail recursion optimization)

Disjunkte Fallunterscheidung –entweder der eine oder der andere Fall treffen zu –... aber nie beide A) mittels disjunkter Klauselköpfe: append([],List,List). append([Head|Tail],List,[Head|Rest]) :- append(Tail,List, Rest). –Guter Stil (deklarativ!) –Mehrfache Verwendungsmodi möglich listen konkatenieren: arg1+arg2=arg3 listen splitten: arg3 –arg1=arg2 oder arg3 –arg2 = arg1 Empfehlung –disjunkte Terme in erstem Argument unterbringen – First argument indexing der Prolog-Datenbasis ausnutzen – richtige Klausel wird direkt gefunden (kein backtracking)

5 Disjunkte Fallunterscheidung mit explizitem Test B) Am Anfang von Klauseln explizite Tests einfügen append([],List,List). append(L1,List,[Head|Rest]) :- L1=[Head|Tail], append(Tail,List, Rest). Empfehlung –wenn Test sich auf Unifizierbarkeit reduzieren lässt ist Variante A) besser –Wenn Test aufwendig ist (komplexe Konjunktion) eigenes Prädikat dafür schreiben –... und in der nächsten Klausel negiert aufrufen (wenn es mehr als 2 Klauseln gibt) Problem: Wiederholung der Tests –Lesbarkeit –Laufzeit

6 Beschränkung des Suchraums Was tun im folgenden Fall? p(...) :- a(X,Y), test(Y), sollNurEinMalAusgeführtWerden(Y), koennteEvtlFehlschlagen(Y). Antwort: Mit bedacht cut verwenden p(...) :- a(X,Y), test(Y), !, sollNurEinMalAusgeführtWerden(Y), koennteEvtlFehlschlagen(Y). Wirkung: –vergisst alle noch offenen Suchalternativen links vom cut also in a(X,Y), test(Y) –vergisst alle noch nachfolgenden Klauseln nach der die den cut enthält (!)

7 Beispiel: Cut validSuperClass (SuperClassId, AdaptedSuperClassId) :- classDefT(SuperClassId,_,'Object',_), AdaptedSuperClassId = 'Object', !. validSuperClass (SuperClassId, AdaptedSuperClassId) :- externT(SuperClassId), AdaptedSuperClassId = 'Extern', !. validSuperClass (SuperClassId, SuperId) :- SuperId = SuperClassId.

8 Gefahren des Cut Falsches Verhalten –Evtl. werden zu viele Alternativen weggeschnitten! Fehleranfälligkeit –Ergebnis abhängig von Reihenfolge der Literale und Klauseln –Achtung bei nachträglichen Änderungen Asymetrisches Input-/Output-Verhalten –nur gewisse Argumente als Input –... andere als Output Unbedingt Dokumentieren! –Asymetrisches Verhalten –Tatsache, dass nicht alle Ergebnisse genfunden werden

9 Weitere built-in Prädikate mit Seiteneffekten Ein-/Ausgabe –write, und eine Tonne mehr –Einfach ?- help im Interpreter eingeben – Grafische Hilfe-Umgebung

10 Schleifen in Prolog Alternativen –Rekursion –Backtracking Rekursion –schon bekannt (append) –Problem: rekursiv alle Zeilen einer Datei einlesen, was damit tun, ausgeben –Rekursive Lösung würde bei grossen Dateien zu Speicherüberlauf führen

11 Beispiel bearbeiteDatei :- wasLesen, // entsprchende built-ins es speichern // entsprchende built-ins fail. bearbeiteDatei :- gespeichertesBearbeiten, es ausgeben // entsprchende built-ins fail. bearbeiteDatei. remember_internal_packages :- packageT(Id,Name), not(extern_package(Id)), assert(package_db(Id,Name)), fail. remember_internal_packages.

12 Programme als Daten: Metaprogrammierung clause(Head,Body) –Body wird mit einem Term unifiziert, der den Klauselrumpf darstellt assert(Term) –Term wird als darstellung einer Klausel interpretiert –... hinten zur Definition des entsprechenden Prädikats angfügt retract(Term) –Klauseln deren Kopf mit Term unifizierbar sind werden gelöscht call(Term) –Term wird als Prädikat interpretiert –... und seine Ausführung wird angestossen

13 Metaprogrammierung: Denkaufgabe Maplist(BinaryPred,List1,List2) –E1 ist N-tes Element von List1 UND E2 ist N-tes Element von List2 binaryPred(E1,E2) –siehe auch Prolog help Verwendet call um maplist zu implementieren

14 Aufgaben Rekursion über Listen üben: nützliche Hilfsprädikate selbst implementieren –member(Elem,List) Aufgabe: Test ob Elem in List enthalten ist Erst nachdenken: Wie soll es sich Verhalten, wenn Elem eine Variable ist? –split(L,Elem,L1,L2) Aufgabe: L = L1 + [Elem] + L2

15 Woher kommt das Logo? Das Schloß ist das Markenzeichen der Universität Bonn Hohe Identifikation aller Universitätsangehörigen