Uni-Logo

Funktionale Programmierung

Lehrkräfte

Dozent Prof. Dr. Peter Thiemann thiemann@info...
ÜbungLuminous Fennellfennell@info...

News

2014-02-14Achtung: auf dem Projektblatt wurde ein Hinweis zu Versionsproblemen mit threepenny-gui hinzugefügt
2014-02-14 Es gibt in den Ferien zwei zusätzliche Übungstermine:
  • Di, 2014-02-18, 14:00 ct: Besprechung von Blatt 12 sowie Vorstellung des Abschlussprojekts
  • Di, 2014-03-04, 14:00 ct: Fragestunde zur Prüfung und Abschlussprojekt
Der Raum ist wie üblich Geb. 101 01-018.
2014-02-13 Definitiver Termin für Exkursion: Mi, 19.2., 16:30. Treffpunkt ist direkt pünktlich in der Firma oder um 16:20 an der Johanneskirche.
2014-02-13 Freiwilliges Abschlussprojekt ist online.
2014-02-04 Exkursion zu factis research findet voraussichtlich am Mi, 19. 02 statt. Genaue Uhrzeit und Treffpunkt wird noch bekannt gegeben.
2014-01-28Achtung: Bitte bis 31. 1. zur Prüfung anmelden
2014-01-27Übungsbeispiel zur Arrow-Notation hinzugefügt (ex10)
2014-01-14Verbesserung von Fehlern auf Blatt 9 und Korrektur der Deadline auf Donnerstag
2013-12-12Das Module Transformers.lhs für ex08 war unvollständig. Bitte neu herunterladen!
2013-12-05Auf Blatt 7 und dem zugehörigen Code waren einige Fehler. Bitte neu herunterladen!
2013-12-03Korrektur von Musterlösung 4! Aufgabe 3 war falsch.
2013-11-14Korrektur von Blatt 4! Die Definition von foldl war falsch.
2013-11-11Beispiel-Logs für Aufgabe 3.1 hochgeladen
2013-11-07Am Vorlesungstermin vom 21.11 wird Prof. Thiemann durch Luminous Fennell vertreten
2013-11-07Es gibt jetzt eine Umfrage zur Schwierigkeit bzw zum Umfang der Übungsblätter im Forum
2013-10-25An der Vorlesungsterminen am 29.10 und 31.10 wird Prof. Thiemann durch Luminous Fennell vertreten
2013-10-25Die Installationsinstruktionen für Mac OS X wurden angepasst
2013-10-15Homepage online

Vorlesungsmaterial

DateContentCodeRecording
20131022Slides-20131022.txtExamples-20131022.hs
20131024Slides-20131024.txtExamples-20131024.hs
20131024Slides-Uebung-20131024.pdf
20131029Slides-20131029.txtExamples-20131029_QCTestSize.hs Examples-20131029_ListComp.hs Examples-20131029_CardGame.hs
20131031Slides-20131031.txtExamples-20131031_CardGame.hs
20131031Slides-Uebung-20131031.txt
20131105Slides beforem4v
20131107Slides afterCode m4v
20131108Desugaring of List-Comprehensions
20131112Higher Order Functions (cont'd) Code m4v
20131112IO
20131114IO cont'dCode m4v
20131119Generating test dataCode m4v
20131121Auswertung m4v
20131126Auswertung (Forts.) Parser m4v
20131126Parser (erweitert) m4v
20131203Parser (Functor, Monad, Applicative) m4v
20131205Monadic Interpretation m4v
20131210Monadic Interpretation (cont'd), Monad Transformers m4v
20131212A Taste of Category Theory for Computer Scientists, Chapter 2.1
20140114Arrows I (Motivation) , Arrows I (Definition) m4v
20140116Arrows I (Conditional and Loop) m4v
20140121Arrows II (Implementation), GADTs m4v
20140123GADTs IIm4v
20140128Data Types a la Cartem4v
20140130Data Types a la Carte (II) m4v
20140204Extensible and Modular Generics for the Massesm4v
20140206Extensible and Modular Generics for the Masses (II) m4v
20140211no lecture
20140213Purely Functional Data Structures m4v

Note: "Recording" is an unedited screen recording of the lecture. Only available inside Uni Freiburg network.

Übungen

AusgabeDeadline
2013-10-22n/aÜbung 0 (Installation)
2013-10-242013-10-29 Übung 1 (Erste Schritte) GlossTest.hs CalcMain.hs Ex01_Solution.hs
2013-10-292013-10-05 Übung 2 (Rekursion, List-Comprehensions, Datentypen) Tracks.hs Ex02_Solution.hs
2013-11-052013-11-12 Übung 3 (Datentypen, Listen, Typklassen) LogTypes.hs GameLogs.hs Canvas.hs Ex03_Solution.hs
2013-11-122013-11-19 Übung 4 (Funktionen höherer Ordnung, IO) (Korrektur 20140107) Ex04_Solution.hs
2013-11-202013-11-27 Übung 5 (IO, Testdaten-Generierung) Ex05_Solution.hs
2013-11-272013-12-04 Übung 6 (GUI, Auswertung, Parsen) Parser.lhs ThreepennyExample.hs Ex06_Solution.hs Ex06_Solution_Parser2.hs
2013-12-042013-12-11 Übung 7 (Review, Parsen) Parser2.hs While.hs Ex07_Solution.hs
2013-12-112013-12-18 Übung 8 (Interpreter, Monaden) (korrigiert 2013-12-12) While2.hs Transformers.lhs (korrigiert 2013-12-12) MatcherExample.hs Ex08_Solution.hs Ex08_Solution_MatcherTrans.hs While3.hs (includes a parser for print)
2013-12-242014-01-16 Übung 9 (Kategorientheorie) (korrigiert 2014-01-14) ex09-solution.pdf
2014-01-222014-01-29 Übung 10 (Arrows, Streamfunktionen) Arrows.hs Ex10_Solution.hs ArrowNotation_lab.hs ArrowsStd.hs
2014-01-312014-02-08 Übung 11 (GADTs) Robot.hs Ex11_Solution_lab.hs
2014-02-072014-02-15 Übung 12 (DTC, Free Monads) DTC.lhs FS.hs Ex12_QBF1.hs Ex12_QBF2.hs Ex12_QBF3.hs Ex12_FS.hs
2014-02-132014-03-07 Abschlussprojekt (Update 2014-02-14) Calculator.hs Widgets.hs

Inhaltliches

In diesem Kurs werden grundlegende bis fortgeschrittene Konzepte der funktionalen Programmierung anhand der Programmiersprache Haskell vermittelt.

Ziel

Lernziele aus dem Modulhandbuch: “Entwickeln einer alternativen, nicht-prozeduralen Sicht auf Algorithmen und Datenstrukturen, sicherer Umgang mit Funktionen und Daten höherer Ordnung, Kenntnis von grundlegenden und fortgeschrittenen funktionalen Programmiertechniken, selbständige Entwicklung von mittelgroßen funktionalen Programmen.”

Behandelte Themen

  • Definition von Funktionen, Patternmatching und Funktionen höherer Ordnung
  • Typen und Typklassen
  • Algebraische Datentypen
  • Funktionale Datenstrukturen
  • Applicative Parser
  • Monaden und Monadentransformer
  • Arrows
  • Verifikation von funktionalen Programmen
  • Monadische Ein/Ausgabe und Stream Ein/Ausgabe

Voraussetzungen

Spaß am Programmieren und am Lernen und Anwenden neuer Programmierkonzepte und -sprachen. Weiterhin empfehlenswert:

  • Kurse “Informatik I” sowie “ Mathematik II für Informatiker” erfolgreich absolviert
  • Eigener Laptop

Vorkenntnisse in Haskell sind nicht notwendig.

Literatur

Grundlage für das erste Drittel der Vorlesung ist das Lehrbuch Programming in Haskell von Graham Hutton, welches auch in der TF-Bibliothek steht.

Organisatorisches

Termine

VorlesungDi 14-16 ctGeb. 101 - SR 01-018
Do 14-15 ctGeb. 101 - SR 01-018
ÜbungDo 15-16 ctGeb. 101 - SR 01-018

Übungsmodus

Es gibt jede Woche ein Übungsblatt, das hier auf der Homepage unter Übungen heruntergeladen werden kann. Zur Bearbeitung und Abgabe der Übungen wird jedem Teilnehmer ein persönliches Subversion Repository eingerichtet.

Abgegebene Übungsaufgaben werden (unbepunktet) korrigiert und die Musterlösung in der folgenden Woche in der Übung besprochen. Weiterhin können bei Bedarf einzelne Themen aus der Vorlesung anhand von konkreten (Code-)Beispielen vertieft werden.

Prüfungsvorraussetzung

Um zur Prüfung zugelassen zu werden müssen die Teilnehmer jede Aufgabe auf jedem Blatt bearbeiten. Falls die sinnvolle Bearbeitung einer Aufgabe nicht gelingt, kann stattdessen eine entsprechende Begründung abgegeben werden.

Prüfung

Je nach Anzahl der Prüfungsanmeldungen wird es entweder eine schriftliche oder mündliche Prüfung während der Prüfungsphase geben. Durch erfolgreiches bearbeiten eines Programmierprojekts gegen Ende der Vorlesungszeit kann die Note einer bestandenen Prüfung verbessert werden.

Kommunikation

Neuigkeiten und Änderungen im Ablauf der Veranstaltung werden auf oben auf dieser Homepage unter News angekündigt. Bei wichtigen kurzfristigen Ankündigungen wird eine Benachrichtigung über das Kurssystem per Email verschickt. Daher sollten sich alle Teilnehmer über das Vorlesungsverzeichnis für die Veranstaltung registrieren!

Des Weiteren gibt es ein Forum, in dem allgemeine Fragen zur Vorlesung und den Übungen besprochen werden können.