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.

Lernziele

Die Studierenden kennen die Konzepte funktionaler Programmierung, können sie anwenden und besitzen Programmiererfahrung in einer funktionalen Sprache wie Haskell. Die vermittelten Kenntnisse fördern die Programmierung im funktionalen Stil auch in anderen Programmiersprachen.

Inhalte

Die behandelten Themen umfassen das Lambda-Kalkül, 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.

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.

Einordnung in Studiengänge

Bachelor
StudiengangFSPO(s)Einordnung
Informatik2021, 2022Schwerpunkt Informatik bzw. Vertiefungsbereich
Medieninformatik2021, 2022Schwerpunkt Medieninformatik bzw. Vertiefungsbereich
Software Engineering2021, 2022Schwerpunkt Software Engineering bzw. Vertiefungsbereich/SE-Profilbereich
Mathematik2018, 2019Nebenfach
Wirtschaftsmathematik2018, 2024Wahlpflicht
Computational Science and Engineering2016, 2019Wahlpflicht
   
Master
StudiengangFSPO(s)Einordnung
Informatik2021, 2022Kernfach Praktische und Angewandte Informatik, Kernbereich Informatik/Praktische Informatik
Medieninformatik2021, 2022Kernfach Praktische und Angewandte Informatik, Kernbereich Informatik/Praktische Informatik
Software Engineering2021, 2022Kernfach Software Engineering, Kernbereich SE/Praktische Informatik, Kernbereich SE/SE
Künstliche Intelligenz2021, 2022Kernfach KI/Praktische und Angewandte Informatik, Kernbereich KI/Praktische und Angewandte Informatik
Mathematik2018, 2019, 2024Nebenfach Informatik
Wirtschaftsmathematik2024Nebenfach Informatik
Wirtschaftsinformatik2024Wahlpflicht
Computational Science and Engineering2016, 2019Wahlpflicht
Lehramt Informatik2017, 2018, 2022Wahlpflicht, Schwerpunkt Informatik
Informationssystemtechnik2017, 2023Vertiefung, Ergänzung

(Angaben ohne Gewähr)

Vergangene Veranstaltungen

Tobias Heß

Thomas Thüm

Dr. Alexander Raschke

Stefan Höppner

Dr. Alexander Raschke

Stefan Höppner

Dr. Alexander Raschke

Stefan Höppner

Termine WS 25/26

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

Übung: montags
10:00 (st) - 12 Uhr in H20