Funktionale Programmierung

Konzepte funktionaler Programmiersprachen werden zunehmend in imperative Sprachen übernommen, etwa Generizität in C++, Java und C# oder Funktionen höherer Ordnung in C++ und C#. Was aber steckt hinter diesen Konzepten und welche Vorteile entfalten sie in einer deklarativen Umgebung? Hierzu befassen wir uns mit der rein funktionalen Programmiersprache Haskell. Ihre Programme bestehen aus Ausdrücken, deren Werte nicht vom Zeitpunkt der Auswertung abhängen. Es gibt keine Zuweisungen, keinen Zustand, keine Seiteneffekte und keine veränderbaren Variablen. Stattdessen ermöglichen Funktionen höherer Ordnung und verzögerte Auswertung neue Arten der Modularisierung von Programmen, die dadurch kürzer und verständlicher werden. Außerdem kann man mit Programmen rechnen, etwa um ihre Korrektheit zu beweisen und sie zu optimieren.

Ziel dieser Lehrveranstaltung ist eine Einführung in die funktionale Programmierung. Die behandelten Themen umfassen grundlegende Konzepte, algebraische Datentypen, musterbasierte Funktionsdefinitionen, Listenkomprehensionen, parametrische Typpolymorphie, Funktionen höherer Ordnung, Algorithmenschemata, verzögerte Auswertung, unendliche Datenstrukturen, Typklassen und Monaden. Ihr Einsatz wird durch Anwendungen aus den Bereichen Algorithmen, Programmtransformation und Übersetzerbau gezeigt. Die in Haskell vermittelten Kenntnisse fördern die Programmierung im funktionalen Stil auch in anderen Programmiersprachen.

Hinweise zu den Terminen

Ich möchte die Vorlesung um 10:00 Uhr (st!) beginnen lassen, damit wir genügend Zeit haben, auch mal auf eine Frage zusätzlich eingehen zu können.

Die Übungen sollen eher interaktiv ablaufen. Die Studierenden treffen sich mit ihren Laptops in einem Besprechungsraum und können aktiv an den Übungen arbeiten und bei Fragen sich direkt an den Übungsleiter wenden. Er kann dann ggf. Hinweise geben und auf die noch ungeklärten Aufgaben aus vorherigen Übungsblättern eingehen.

Der genaue Termin für diese Übungen wird in der ersten Vorlesungsstunde vereinbart.

Literatur

  • Richard Bird, Introduction to Functional Programming using Haskell, Prentice Hall, second edition, 1998.
  • Paul Hudak, The Haskell School of Expression: Learning Functional Programming through Multimedia, Cambridge University Press, 2000.
  • Graham Hutton, Programming in Haskell, Cambridge University Press, 2007.
  • Bryan O'Sullivan, Don Stewart, John Goerzen, Real World Haskell, O'Reilly, 2008.
  • Simon Thompson, Haskell: The Craft of Functional Programming, Addison Wesley, third edition, 2011.
  • Miran Lipovača, Learn You a Haskell for Great Good!, no starch press, 2011.

Termine

Vorlesung: Donnerstag 10:00 (st) - 12 Uhr in O28-1002

Übungen: Termin wird in der Vorlesung vereinbart