Nächste Seite:
Einleitung
Deklarative Programmierung
Vorlesung
Wintersemester 2009
Johannes Waldmann, HTWK Leipzig
Einleitung
Definition
Softwaretechnische Vorteile
Gliederung der Vorlesung
Organisation der LV
Literatur
Daten
Algebraische Datentypen
Datentyp mit mehreren Konstruktoren
Fallunterscheidung, Pattern Matching
Rekursive Datentypen
Peano-Zahlen
(mehrsortige) Signaturen
Algebren
Term-Algebren
Vergleich Termalgebra/data
Polymorphie
Listen
Operationen auf Listen
Funktionen
Funktionen als Daten
Ein- und mehrstellige Funktionen
Rekursion über Listen
Rekursionsmuster (Prinzip)
Rekursionsmuster (Peano-Zahlen)
Übungen Rekursionmuster
Bedarfs-Auswertung
Motivation: Datenströme
Bedarfs-Auswertung, Beispiele
Bedarfsauswertung in Haskell
Strictness
Ändern der Striktheit
Primzahlen
Rekursive Stream-Definitionen
Traversieren
Monaden
Motivation (I): Rechnen mit Maybe
Motivation (II): Rechnen mit Listen
Die Konstruktorklasse Monad
Do-Notation für Monaden
Monaden mit Null
Aufgaben zur List-Monade
Die IO-Monade
Die Zustands-Monade
Parser als Monaden
The ``real'' world: IO
IO-Beispiel
Konkretes Modell für IO: Zustand
Konkretes Modell für IO: reaktiv
IO-Übung: find
Lazy IO
Variablen (IORefs)
Variablen (STRefs)
Variablen -- Ausblick
Projekte
autotool: Erweiterungen, Reparaturen
autotool-Server/Happstack
Ableitungsmuster
Werkzeuge zum Testen
Beispiel
Quickcheck, Smallcheck, ...
Einordnung
Beispiel: Test von Sortierverfahren
Code Coverage
Beispiel: Partitionen
Polymorphie/Typklassen
Einleitung
Der Typ von sort
Instanzen
Typen und Typklassen
Wörterbücher
Wörterbücher (II)
Vergleich Polymorphie
Klassen-Hierarchien
Die Klasse Show
Kanonische Show/Read-Instanzen
Die Wahrheit über Read
Automatisches Ableiten von Instanzen (I)
Default-Implementierungen
Generische Instanzen (I)
Generische Instanzen (II)
Überlappende Instanzen
Überlappende Instanzen (II)
Typklassen als Prädikate
Multi-Parameter-Klassen
Benutzung von Typklassen bei Smallcheck
Typgesteuertes Generieren von Werten
Generieren der Größe nach
Kombinatoren für Folgen
Anwendung I: Generierung von Bäumen
Anwendung II: geordnete Bäume
Theorems ...for Free
Kategorien
Kategorien (Definition I)
Kategorien (Definition II)
Kategorien: einfache Beispiele
Bsp: Kategorie, deren Objekte keine Mengen sind
Punktfreie Definitionen: injektiv
Punktfreie Definitionen: Produkt
Funktoren zwischen Kategorien
(Endo-)Funktoren in Haskell
Funktoren als Typklasse
Theorems for free
Theorems for free (II)
Hintergrund zu Monaden
Monaden
Rechenregeln für Monaden
Rechenregeln (Beispiele)
Arrows
Einleitung
Stream Functions
Kombinatoren für Stream Functions
Die Arrow-Klassen
proc-Notation für Arrows
Anwendung von Arrows in HXT
XML-Serialisierung
XML-Serialisierung (II)
Logisches Programmieren
Einleitung
Syntax
Denotationale Semantik
Operationale Semantik
Beispiele
Implementierung
Substitutionen (Definition)
Substitutionen (Produkt, Ordnung)
Unifikation--Definition
Unifikation--Algorithmus
Suche in Haskell
Ein einfacher Prolog-Interpreter
Ideales und Reales Prolog
Erweiterungen
Modus-Deklarationen für Prädikate
Verwendung von Modi
Constraint-Programmierung
Formeln, Modelle
(CNF-)SAT
Beispiel SAT-Codierung
SMT (SAT modulo Theories)
Bitblasting
Zusammenfassung Constraint-Programmieren
Nebenläufige und parallele Programme
Definition, Motivation
Threads
Kommunikation: MVar
Beispiel MVar
Kommunikation: Chan
Beispiel Chan
Programmieren mit Locks
Programmieren mit Locks
Transaktionen anstelle von Locks
STM-Beispiel
STM-Literatur
Parallelität durch Annotationen
Beispiel: Quicksort mit par/pseq
Par/Pseq-Beispiel
Par/PSeq-Zusammendfassung
(Nested) Data Parallelism
Über dieses Dokument ...
Johannes Waldmann 2010-01-25