Funktionale Programmierung
LVA 185.161, VL 2.0, ECTS 3.0, 2010 W
(zweistündige Vorlesung mit Laborübung; siehe auch
TISS/185.161)
Haben Sie Interesse an einem geförderten
Auslandsstudium?
Informationen zu Fördermöglichkeiten finden Sie
hier.
Anmeldesystem offen!
Das elektronische Anmeldesystem ist offen.
Zum Anmeldesystem.
Die Vorlesung führt in die Prinzipien und Konzepte der
funktionalen Programmierung ein und spannt dabei den Bogen von den
Grundlagen bis zur Anwendung. In der vorlesungsbegleitenden
Plenumsübung
Haskell Live wird am
Beispiel konkreter Aufgaben praktisch vorgeführt und diskutiert,
wie sich diese zur Lösung einsetzen lassen. Dabei können
insbesondere auch eigene Lösungsvorschläge vorgestellt und
zur Diskussion gestellt werden. Im Laborübungsteil wird der
funktionale Programmierstil anhand von Beispielen eigenständig
angewendet und eingeübt und ein vertieftes auch praktisches
Verständnis für die Konzepte und Prinzipien funktionaler
Programmierung gewonnen. Als Demonstrations- und
Implementierungssprache wird in Vorlesung und Übung die
funktionale
state-of-the-art Programmiersprache
Haskell verwendet.
Die Vorlesung behandelt insbesondere folgende Themen und deren
Umsetzung in Haskell:
- Funktionaler Programmierstil (Programme als Systeme
rekursiver Rechenvorschriften)
- Lambda-Kalkül (Grundlage der semantischen
Fundierung funktionaler Programmiersprachen)
- Auswertungsstrategien für Ausdrücke und
Programme (eager evaluation, lazy evaluation)
- Rekursion und Rekursionstypen
- Funktionen höherer Ordnung (Programmieren mit
Funktionen als Argument und Resultat)
- Polymorphie (parametrisch, ad-hoc)
- Typsysteme, Typinferenz (monomorph, polymorph)
- Ströme und Stromverarbeitung
- ...
Die Studierenden erhalten ein umfassendes theoretisches und
praktisches Verständnis der Grundlagen und Konzepte der
funktionalen Programmierung und lernen, diese auf ihre Eignung zur
Lösung programmiertechnischer Aufgaben zu bewerten und angemessen
und sinnvoll im funktionalen Programmierstil einzusetzen.
Der Studienplan empfiehlt die Lehrveranstaltung im Anschluss an die
Lehrveranstaltungen zur objekt- und logikorientierten Programmierung
(
LVA
185.162 Objektorientierte Programmierung und
LVA 185.179
Logikorientierte Programmierung) zu hören.
Neben dieser Empfehlung gelten für die Teilnahme an der
Lehrveranstaltung die in Abschnitt 1.6 des ab 01.10.2006 gültigen
neuen Studienplans
niedergelegten Voraussetzungen.
Siehe
TUWIS++/185.161.
Termine
- Fr, 01.10.2010, 14:15-15:00 Uhr, Vorbesprechung im
HS 8 Heinz Parkus,
Karlsplatz 13. Unmittelbar anschließend
findet von 15:00 Uhr bis 16:30 Uhr an gleicher Stelle die erste Vorlesung statt.
Die Vorlesungstermine sind wie folgt:
- Do, 16.12.2010, 16:00-17:30 Uhr, Vorlesung im
HS 8 H.Parkus, Karlsplatz 13
(Letzter Vorlesungstermin)
- Do, 09.12.2010, 16:00-17:30 Uhr, Vorlesung im
HS 8 H.Parkus, Karlsplatz 13
- Do, 02.12.2010, 08:15-09:45 Uhr, Vorlesung im
HS 8 H.Parkus, Karlsplatz 13
Nachmittags Informatik-lehrveranstaltungsfrei zum epilog-Besuch!
- Do, 25.11.2010, 16:00-17:30 Uhr, Vorlesung im
HS 8 H.Parkus, Karlsplatz 13
- Do, 11.11.2010, 16:00-17:30 Uhr, Vorlesung im
HS 8 H.Parkus, Karlsplatz 13
- Do, 04.11.2010, 16:00-17:30 Uhr, Vorlesung im
HS 8 H.Parkus, Karlsplatz 13
- Do, 28.10.2010, 08:15-09:45 Uhr, Vorlesung im
HS 8 H.Parkus, Karlsplatz 13
- Fr, 15.10.2010, 15:15-16:45 Uhr, Vorlesung im
HS 8 H.Parkus, Karlsplatz 13
- Do, 14.10.2010, 16:00-17:30 Uhr, Vorlesung im
HS 8 H.Parkus, Karlsplatz 13
- Fr, 01.10.2010, 15:00-16:30 Uhr, Vorlesung im
HS 8 H.Parkus, Karlsplatz 13
Die Haskell Live Termine sind voraussichtlich wie folgt:
- Fr, 14.01.2011, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 17.12.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 10.12.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 03.12.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 26.11.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 19.11.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 12.11.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 05.11.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 29.10.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 22.10.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 15.10.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
- Fr, 08.10.2010, Haskell Live von
14:15-15:00 Uhr im HS 6, Karlsplatz 13
Materialien zu Haskell Live finden Sie
hier.
Im
Labor
stehen Ihnen zu folgenden Zeiten Tutoren für Fragen zur Verfügung.
Montag
| 14:45 Uhr - 15:45 Uhr (Bernhard Urban)
|
Mittwoch
| 11:00 Uhr - 12:00 Uhr (Bong Min Kim)
(nicht am 22.12.2010!)
13:00 Uhr - 14:00 Uhr (Christoph Spörk)
|
Donnerstag
| 11:00 Uhr - 12:00 Uhr (Florian Hassanen)
|
Weitere Betreuung
Nutzen Sie insbesondere Plenumsübung und Laborbetreuung, um
mögliche Fragen und Probleme in einem persönlichen
Gespräch zu klären. Verfolgen Sie daneben die Newsgroup
tuwien.lva.funktional für Fragen von allgemeinem
Interesse zur Lehrveranstaltung.
Nicht
für die Öffentlichkeit bestimmte Fragen zur
Lehrveranstaltung können Sie ebenfalls persönlich
insbesondere mit den Tutoren besprechen oder elektronisch an bitte
ausschließlich folgende Adresse richten:
fp2010W@g0.complang.tuwien.ac.at
(
Achtung: an fp2010W@g0... nur von der g0 aus
senden, nicht von einem anderen Rechner oder von außen!)
In der Lehrveranstaltung wird die Programmiersprache
Haskell zur
praktischen Illustration funktionaler Programmierung verwendet; in der
Laborübung der Haskell-Interpreter
Hugs 98 verwendet, der für
viele Plattformen frei verfügbar ist.
Die Folien zu Vorlesung und Vorbesprechung sind in Folge jeweils als
Gesamtdokument in drei Formaten mit 1, 4 bzw. 8 Folien
pro Seite verfügbar und werden im Lauf des Semesters
nach Bedarf aktualisiert:
- Vorlesung (Stand: 16.12.2010)
- Vorbesprechung (Stand: 01.10.2010)
Über
funktionale Programmierung und
funktionale
Programmierung in Haskell gibt es eine Fülle von
Lehrbüchern. Im folgenden finden Sie eine Auswahl aktueller
Lehrbücher, die als begleitende und ergänzende Lektüre
zur Lehrveranstaltung und auch zum Selbststudium sehr gut geeeignet
sind. Weitergehende Literaturhinweise, auch auf Originalartikel,
werden bei Bedarf zusätzlich in der Vorlesung angegeben. Die mit
"drei Punkten" abschließende Liste soll Sie ermuntern, auch
weitere Literatur zu suchen und auszuwählen, die Ihnen
und Ihrem Lerntyp besonders entspricht.
- Textbuch zur Vorlesung:
- Simon Thompson. Haskell: The Craft of Functional
Programming. Addison-Wesley (Pearson), 2nd edition, 1999.
- Haskell 98 Sprachstandard:
- Simon Peyton Jones (Hrsg.). Haskell 98: Language and Libraries.
The Revised Report. Cambridge University Press, 2003.
- Ausgewählte weitere Lehrbücher:
- Richard Bird. Introduction to Functional Programming using
Haskell. Prentice-Hall, 2nd edition, 1998.
- Manuel M. T. Chakravarty, Gabriele C. Keller. Einführung
in die Programmierung mit Haskell. Pearson Studium, 2004.
- Antony J.T. Davie. An Introduction to Functional Programming
Systems using Haskell. Cambridge University Press, 1992.
- Kees Doets, Jan van Eijck. The Haskell Road to Logic,
Maths and Programming. Texts in Computing Vol. 4, King's
College, UK, 2004.
- Paul Hudak. The Haskell School of Expression: Learning Functional
Programming through Multimedia. Cambridge University Press, 2004.
- Graham Hutton. Programming in Haskell. Cambridge University
Press, 2007.
- Wolfram-Manfred Lippe. Funktionale und Applikative
Programmierung. Springer-Verlag, 2009.
- Peter Pepper. Funktionale Programmierung in OPAL, ML, Haskell
und Gofer. Springer-Verlag, 2. Auflage, 2003.
- Fethi Rabhi, Guy Lapalme. Algorithms: A Functional Programming
Approach. Addison-Wesley, 1999.
- Simon Thompson. Haskell: The Craft of Functional Programming.
Addison-Wesley (Pearson), 2nd edition, 1999.
- ...
Weitere Informationsquellen
Die
Haskell Home Page stellt
umfangreiche Informationen zu Haskell zur Verfügung. Ein
Online-Tutorial
erklärt die Sprache sehr gut, setzt aber Grundkenntnisse
funktionaler Programmierung voraus. Empfehlenswerte weitere
Literaturhinweise finden Sie auf den Folien zur
Vorbesprechung der Lehrveranstaltung und im
Abschnitt
Literaturhinweise auf dieser
Seite.
Für die Übungsaufgaben werden, so nicht schon auf dem
Aufgabenblatt geschehen, im Regelfall einige Testfälle zur
Verfügung gestellt. Diese Testfälle sind in erster Linie
dazu gedacht, die erwartete Signatur, insbesondere die Reihenfolge von
Parametern deutlich zu machen. Sie können Ihnen ein
eigenständiges Testen Ihrer Programme nicht abnehmen. Die
Testfälle sind dazu weder gedacht noch geeignet.
Laborübung
Je nach Qualität Ihrer Lösungen der Aufgabenstellungen bekommen Sie
Punkte. Maximal 100 Punkte pro Aufgabe sind möglich, wenn Sie die
Abgabe rechtzeitig durchgeführt haben. Für Lösungen beziehungsweise
Änderungen der Lösungen, die nachträglich (also eine Woche nach dem
Fälligkeitstermin) abgegeben wurden, gibt es nur die halbe Anzahl der
Punkte, die Sie bei rechtzeitiger Abgabe erreicht hätten. Änderungen
der Lösung können die Punkteanzahl nach der Abgabe sowohl positiv als
auch negativ beeinflussen. Das heißt, wenn die Lösung durch die
Änderung schlechter wird, können auch Punkte abgezogen werden. Ihre
Punkte ergeben sich aus folgender Formel: Gesamtpunktezahl = (Punkte
für ursprüngliche Lösung + Punkte für nachträgliche Lösung) / 2. Es
sind nie weniger als 0 oder mehr als 100 Punkte erreichbar.
Bei z.B. 10 Abgaben im Semester sind maximal 1000
Punkte erreichbar. Für eine positive Beurteilung des Laborübungsteils
benötigen Sie von den maximal erreichbaren Punkten mindestens 500
Punkte, also 50%, für "Befriedigend" mindestens 625 (62.5%), für "Gut"
mindestens 750 (75%) und für "Sehr Gut" mindestens 875 Punkte
(87.5%).
Die Note für den Laborübungsteil bestimmt zur Hälfte die Note der
Lehrveranstaltung. Die zweite Hälfte ergibt sich aus der schriftlichen
Prüfung. Eine Voraussetzung für eine insgesamt positive Beurteilung
ist aber eine positive Beurteilung beider Teile, des Laborübungsteils
und des schriftlichen Prüfungsteils.
Schriftliche Prüfung
Die Beurteilung setzt sich je zur Hälfte aus dem Erfolg bei der
Laborübung und dem Ergebnis einer 90-minütigen schriftlichen
Prüfung (sog. Klausur) zusammen. Die schriftliche Prüfung erfolgt
über den Vorlesungs- und Übungsstoff und einen
wissenschaftlichen (Übersichts-) Artikel, den Sie sich
im Lauf der Vorlesungszeit selbstständig
erschließen und zwar
- John Hughes. Why Functional Programming Matters.
Research Topics in Functional Programming. D. Turner (Hrsg.),
Addison Wesley, 1990.
Der Haupttermin für die schriftliche Prüfung ist im
Anschluss an den Vorlesungblock (Für den
Termin
siehe hier).
Nachtragsklausurtermine wird es zu Beginn, in der Mitte und gegen Ende
der Vorlesungszeit im Sommersemester 2011 geben. Die genauen Termine
werden rechtzeitig in TUWIS++ bekanntgegeben. Nach Ende der
Vorlesungszeit im Sommersemester wird es keine weiteren
Nachtragstermine geben. Bis dahin noch nicht ausgestellte Zeugnisse
werden dann ausgestellt.
Eine Anmeldung zu den schriftlichen
Prüfungen ist jeweils erforderlich und erfolgt über TUWIS++.
Zeugnisausstellung
Zeugnisse werden zum
frühestmöglichen Zeitpunkt ausgestellt. Das ist nach nicht
positivem Abschluss des Laborübungsteils, dem positiven Abschluss
von Laborübungsteil und schriftlicher Prüfung, nach
zweimaligem nicht positivem Abschluss der schriftlichen Prüfung
bzw. nach Verstreichen aller schriftlichen Prüfungstermine ohne
positiven Abschluss.
Vortragender
Jens Knoop.