Funktionale Programmierung (FuPro)
  • Dozent: Prof. Dr. Peter Padawitz
  • Pflichtveranstaltung INF-BSc-114 im WiSe 2017/18 für Studierende des Bachelor-Studiengangs Informatik
    sowie
    Wahlveranstaltung im Hauptstudium der Informatik-Diplomstudiengänge für die Schwerpunktgebiete 1 und 4
  • 2 SWS Vorlesung + 1 SWS Übung = 5 Credits
  • Zur Teilnahme an der Übung bitte auf der Moodle-Seite dieser LV anmelden. Dort stehen alle laufenden Infos, Übungstermine und -aufgaben.
  • Übungsleiter: Jos Kusiek
  • Vorlesungstermin: Fr 14:15-15:45 im HG 2, Hörsaal 3
  • Beginn: 13. 10. 2017
  • Inhalt
    Die LV behandelt Konzepte und Anwendungen funktionaler, musterbasierter und monadischer Programmierung anhand der zur Zeit mächtigsten und am weitesten verbreiteten funktionalen Programmiersprache Haskell. Der Kern eines funktionales Programms ist ein System rekursiver Gleichungen zwischen funktionalen Ausdrücken. Seine Ausführung besteht in der Auswertung der Ausdrücke durch Anwendung der Gleichungen. Auch Ein- und Ausgabedaten sind funktionale Ausdrücke, deren Funktionen Konstruktoren genannt werden, weil sie nicht ausgeführt werden, sondern nur den Aufbau der Daten(muster) beschreiben. Dieses Sprachmodell und der damit einhergehende Programmierstil unterscheiden sich zunächst stark von dem einer objektorientierten, imperativen und zustandsorientierten Sprache wie Java. Sie erlauben oft problemnahere und flexiblere Lösungen, die leicht an neue Anforderungen, modifizierte Datenstrukturen, etc. anpassbar sind. Mit den Konzepten der funktionalen Programmierung, insbesondere mit geeigneten Typklassen, lässt sich aber auch zustandsorientiert und sogar aspektorientiert implementieren, so dass z.B. der gleiche Algorithmus leicht von einer deterministischen in eine nichtdeterministische oder um differenzierte Ausnahmebehandlungen erweiterte Variante übertragbar ist. Ebenso kann die traditionell der logischen oder relationalen Programmierung vorbehaltene Beantwortung prädikatenlogischer Anfragen funktional realisiert werden. Dies ist eine Konsequenz der lazy evaluation-Strategie, der die Ausführung jedes Haskell-Programms folgt. Sie erlaubt u.a. das Rechnen mit unendlichen Datenströmen, Prozessbäumen, etc.
    Folglich wird in dieser Lehrveranstaltung nicht nur ein bestimmter Programmierstil behandelt, sondern ganz allgemein die Klassifikation von Daten- und Programmtypen auf der Basis mathematischer Strukturen sowie deren direkte Implementierung. Damit wird Haskell auch als Entwurfssprache einsetzbar, in der sich formale Modelle direkt ausführen lassen (rapid prototyping).
  • Kompetenzen
    Die Studierenden lernen den Umgang mit Konzepten funktionaler, musterbasierter und monadischer Programmierung und deren Einsatz in verschiedenen Anwendungsbereichen. Sie werden damit u.a. vorbereitet auf Wahlpflicht-LVs wie Übersetzerbau und das Fachprojekt Rapid Prototyping. Außerdem lernen sie, wie diese Konzepte nicht nur zur Lösung reiner Implementierungsaufgaben, sondern auch zur präzisen Modellierung verwendet werden können, was wiederum dazu befähigt, die Konzepte sowie entsprechende Werkzeuge auch in Entwicklungsumgebungen zu nutzen, in denen am Ende in Java, C++ oder einer anderen nichtfunktionalen Sprache programmiert wird. Allerdings werden auch dort zunehmend funktionale Konstrukte eingebaut, was bereits eine Reihe hybrider Sprachen wie z.B. F-Sharp, Objective CAML, Python, Ruby und Scala hervorgebracht hat.
  • Zeitplan der Vorlesung (vorläufig)
    • 13. 10. 2017 Typen undFunktionen
    • 20. 10. 2017 dto.
    • 27. 10. 2017 Listen
    • 03. 11. 2017 dto.
    • 10. 11. 2017 Datentypen, Typklassen
    • 17. 11. 2017 dto.
    • 24. 11. 2017 Bäume
    • 01. 12. 2017 dto.
    • 08. 12. 2017 Fixpunkte, Graphen
    • 15. 12. 2017 dto.
    • 22. 12. 2017 Funktoren und Monaden
    • 12. 01. 2018 dto.
    • 19. 01. 2018 Felder, Matrizen
    • 26. 01. 2018 Monadentransformer
    • 02. 02. 2018 Comonaden
  • Klausurtermine (vorläufig)
    • 14. 02. 2018, 11:00 - 13:00, HG 2, Hörsäle 1, 5 und 6
    • 21. 03. 2018, 11:00 - 13:00, HG 2, Hörsäle 1, 3 und 6
  • Folienskript zur LV
  • Haskell-Startseite
  • Hackage: Haskell-Bibliotheken und -Werkzeuge
  • Hoogle, die Haskell-Suchmaschine
  • Haskell 98 Report - Online-Version
  • Haskell 2010 Report
  • Tutorials et al.
  • Haskell-Lehrbücher
  • Haskell-Module (die zum Teil in der LV benutzt werden)
  • Skript zu einer Vorläufer-Veranstaltung, die auf der seinerzeit fortgeschrittensten funktionalen Sprache Standard ML basiert.
  • Sammlungen alter Übungsblätter