Introduction to Functional Programming

Die Veranstaltung beschäftigt sich mit den Grundlagen nichtprozeduraler Programmierung und hier insbesondere mit der Funktionalen Programmierung und der Logikprogrammierung .  Beide folgen dem deklarativen Programmierprinzip, nachdem ein Programm nicht wie in den prozeduralen Sprachen aus der algorithmischen Abarbeitung einer Lösungsvorschrift besteht, sondern aus der logischen Spezifikation des zu lösenden Problems selbst. Diese Spezifikation besteht aus einer Menge von abstrakten "wenn-dann" Reduktionsregeln, welche das den Problembereich charakterisierende Faktenwissen repräsentieren.

Die Ausführung eines Logikprogrammes entspricht der logischen Deduktion einer Lösung direkt aus dieser abstrakten Problemspezifikation. In der funktionalen Programmierung wird das aus der Algebra bekannte symbolische Auswerten von Rechenausdrücken zum Grundprinzip des Ablaufmodelles erhoben und Problemlösungen als Rekursionsgleichungen über anwendungsspezifischen Datenstrukturen formuliert. Die deklarative Programmiermethodik ist besonders erfolgreich etwa in der  Behandlung von Planungsproblemen, in Expertensystemen und im Bereich der Künstlichen Intelligenz, wo es auf generische Lösungen und die leichte und rasche Anpassung an neue Aufgabenstellungen ankommt.

In der Vorlesung wird der systematische Aufbau einer funktionalen Programmiersprache schrittweise erläutert und  ausführlich Gelegenheit zum praktischen Programmieren  mit der Programmiersprache Haskell gegeben. Neben der dynamischen Ablaufsemantik wird in der Vorlesung ein polymorphes Typsystem entwickelt und in elementare Techniken der Typprüfung und Typsynthese eingeführt.