- Dozent: Prof. Dr. Peter Padawitz
- Wahlpflichtmodul INF-BSc-213 des Katalogs Konzepte für Software im WiSe 2019/20 für Studierende des Bachelor-Studiengangs Informatik oder Angewandte Informatik
- 2 SWS Vorlesung + 1 SWS Übung = 4 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 OH 14, E 23
- Beginn: 11. 10. 2019
- 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.
- Modellieren und Implementieren in Haskell (Skript zur LV)
- Zeitplan der Vorlesung
- 11. 10. 2019 Typen und Funktionen
- 18. 10. 2019 dto.
- 25. 10. 2019 Listen
- 08. 11. 2019 dto.
- 15. 11. 2019 Rekursive Datentypen, Typklassen
- 22. 11. 2019 dto.
- 29. 11. 2019 Typklassen, Bäume
- 06. 12. 2019 dto.
- 13. 12. 2019 Fixpunkte, Graphen
- 20. 12. 2019 dto.
- 21. 12. 2019 Funktoren, Monaden
- 10. 01. 2020 dto.
- 17. 01. 2020
Felder, Matrizen
- 24. 01. 2020 Monadentransformer, Comonaden
- 31. 01. 2020 dto.
- 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
- Marco Block, Adrian Neumann, Haskell-Intensivkurs, Springer 2011
- Ernst-Erich Doberkat, Haskell: Eine Einführung für Objektorientierte, Oldenbourg 2012
- Graham Hutton, Programming in Haskell, Cambridge University Press 2007 (in der Lehrbuchsammlung vorhanden) - Folien
- Manuel M. T. Chakravarty, Gabriele C. Keller, Einführung in die Programmierung mit Haskell, Pearson Studium 2004
- Kees Doets, Jan van Eijck, The Haskell Road to Logic, Maths and Programming, Texts in Computing Vol. 4, King's College 2004
- Richard Bird, Thinking Functionally with Haskell, Cambridge University Press 2014
- Richard Bird, Pearls of Functional Algorithm Design, Cambridge University Press 2010
- Richard Bird, Introduction to Functional Programming using Haskell, Prentice Hall 1998 (in der Lehrbuchsammlung unter L Sr 449/2)
- Paul Hudak, The Haskell School of Expression: Learning Functional Programming through Multimedia, Cambridge University Press 2000
- Fethi Rabhi, Guy Lapalme, Algorithms: A Functional Programming Approach, Addison-Wesley 1999 (in der Lehrbuchsammlung unter L Sr 482/2)
- Simon Thompson, Haskell: The Craft of Functional Programming, 3. Auflage, Addison-Wesley 2011
- Bryan O'Sullivan, Don Stewart, John Goerzen, Real World Haskell, O'Reilly 2008, pdf-Datei (8,2 MB)
- Simon Marlow, Parallel and Concurrent Programming in Haskell, O'Reilly 2013
- Peter Pepper, Petra Hofstedt, Funktionale Programmierung: Sprachdesign und Programmiertechnik, Springer 2006
- Wolfram-Manfred Lippe, Funktionale und applikative Programmierung, Springer 2009 (liefert eine detaillierte Übersicht über die historische Entwicklung einschlägiger Sprachen und Implementierungs-techniken)
- 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
|
|