Funktionale Programmierung
LVA 185.A03, VU 2.0, ECTS 3.0, 2016 W
(zweistündige Vorlesung mit Übung; siehe auch
TISS/185.A03)
Haben Sie Interesse an einem geförderten
Auslandsstudium?
Informationen zu Fördermöglichkeiten finden Sie
hier.
Termine für Vorlesung, Haskell Live, Haskell Private
und Labor
- Di, 06.12.2016, 08:15 - 09:45 Uhr, Vorlesung im
Informatik-Hörsaal, Treitlstr. (letzter Vorlesungstermin)
- Di, 29.11.2016, 08:15 - 09:45 Uhr, Vorlesung im
Informatik-Hörsaal, Treitlstr.
- Di, 22.11.2016, 08:15 - 09:45 Uhr, Vorlesung im
Informatik-Hörsaal, Treitlstr.
- Di, 15.11.2016: Keine Vorlesung (Tag des Landespatrons, LVA-frei)
- Di, 08.11.2016, 08:15 - 09:45 Uhr, Vorlesung im
Informatik-Hörsaal, Treitlstr.
- Do, 03.11.2016, 16:15 - 17:45 Uhr, Vorlesung im
Informatik-Hörsaal, Treitlstr.
- Di, 01.11.2016: Keine Vorlesung (Allerheiligen)
- Do, 27.10.2016: Einladung zum E185.1-Informatikkolloquium über
Preserving Privacy with (Haskell) Monads
mit Prof. Dr. Alejandro Russo, Chalmers University of Technology, Göteborg, Schweden, um 15:00 Uhr s.t. im Hörsaal HS4, Freihaus.
Sie sind herzlich eingeladen zu diesem Vortrag!
- Di, 25.10.2016, 08:15 - 09:45 Uhr, Vorlesung im
Informatik-Hörsaal, Treitlstr.
- Di, 18.10.2016, 08:15 - 09:45 Uhr, Vorlesung im
Informatik-Hörsaal, Treitlstr.
- Do, 13.10.2016, 16:00-17:30 Uhr, Vorlesung im
EI 9 Hlawka-Hörsaal,
Gußhausstr. 25-29.
- Mi, 12.10.2016, 08:15-09:45 Uhr, Vorlesung im
GM 2 Radinger-Hörsaal,
Hoftrakt (Getreidemarkt 9) - Bauteil BD Hoftrakt, 1.OG
- Di, 11.10.2016, 08:15 - 09:45 Uhr, Vorlesung im
Informatik-Hörsaal, Treitlstr.
- Do, 06.10.2016, 16:15 - 17:45 Uhr, Vorlesung im
EI 3 Sahulka-Hörsaal,
Gußhausstr. 25-29.
- Di, 04.10.2016, 08:15 - 09:45 Uhr, Vorbesprechung und erste Vorlesung im
Informatik-Hörsaal, Treitlstr.
- Fr, 13.01.2017, 14:15-15:00 Uhr, Haskell Live
im Informatik-Hörsaal, Treitlstr.
- Fr, 16.12.2016: Kein Haskell Live (verschoben auf 13.01.2017)
- Fr, 09.12.2016, 14:15-15:00 Uhr, Haskell Live
im Informatik-Hörsaal, Treitlstr.
- Fr, 02.12.2016, 14:15-15:00 Uhr, Haskell Live
im Informatik-Hörsaal, Treitlstr.
- Fr, 25.11.2016, 14:15-15:00 Uhr, Haskell Live
im Informatik-Hörsaal, Treitlstr.
- Fr, 18.11.2016, 14:15-15:00 Uhr, Haskell Live
im Informatik-Hörsaal, Treitlstr.
- Fr, 11.11.2016, 14:15-15:00 Uhr, Haskell Live
im Informatik-Hörsaal, Treitlstr.
- Fr, 04.11.2016, 14:15-15:00 Uhr, Haskell Live
im Informatik-Hörsaal, Treitlstr.
- Fr, 28.10.2016, 14:15-15:00 Uhr, Haskell Live
im Informatik-Hörsaal, Treitlstr.
- Fr, 21.10.2016, 14:15-15:00 Uhr, Haskell Live
im Informatik-Hörsaal, Treitlstr.
- Fr, 14.10.2016, 14:15-15:00 Uhr, Haskell Live im Informatik-Hörsaal, Treitlstr. (Erster Haskell Live Termin)
Die
Anmeldung
zu Haskell Private Terminen
ist ab sofort
hier
möglich.
Haskell Private bietet Ihnen die Möglichkeit, ausgehend von Ihren
abgegebenen Übungsaufgaben oder anderen Codebeispielen, die Sie
einbringen und zur Diskussion stellen möchten, individuelles
Feedback zu erhalten. Haskell Private findet dazu in Kleingruppen von
max. 4 Studierenden und einem Tutor im Stil eines gemeinsamen
Code-Reviews statt.
Der Ablauf dieser gemeinsamen Code-Reviews ist an den Vorschlag von
Philip Guo angelehnt, der unter dem Titel Refining
Students' Coding and Reviewing Skills in der Septemberausgabe
2014 des Magazins "Communications of the ACM" erschienen ist:
Damit Sie möglichst großen Nutzen für sich aus der Teilnahme
an Haskell Private ziehen können, müssen Sie diesen Vorschlag
in jedem Fall vor Ihrer ersten Teilnahme an Haskell Private
gelesen haben.
Tutoren stehen beginnend mit Montag, den 17.10.2016, regelmäßig
zu folgender Zeit für Fragen und indivuelle Betreuung im
Labor
zur Verfügung.
Montag (ab Mo, 17.10.2016)
| 15:00 Uhr - 16:00 Uhr
|
Plenumsübung Haskell Live, Haskell Private und
Laborsprechstunden und -betreuung bieten die Möglichkeit, Fragen
und Probleme in einem persönlichen Gespräch zu
klären. Für Fragen von allgemeinem Interesse steht das TISS-Forum zur Lehrveranstaltung zur Verfügung.
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: fp2016W@g0.complang.tuwien.ac.at
(Hinweis: an fp2016W@g0... nur von der g0
aus senden, nicht von einem anderen Rechner oder von außen!)
Anmeldung
Die Anmeldung zur Lehrveranstaltung erfolgt über
TISS/185.A03
und ist bis
Fr, 14.10.2016, 12:00 Uhr,
möglich. Diese ist maßgeblich für die Teilnahme an der
Lehrveranstaltung und unterliegt den in den Studienplänen
genannten Voraussetzungen.
Nach Abschluss der Anmeldeperiode wird für die Studierenden
mit valider Anmeldung ein persönliches Benutzerkonto auf der
Maschine g0.complang.tuwien.ac.at
eingerichtet. Benutzerkennung und erstes Losungswort werden jedem
Teilnehmer durch Nachricht an die Standardadresse e-Matr.Nr@student.tuwien.ac.at mitgeteilt. Dieses
erste Losungswort ist im Zuge des ersten Einbuchens auf das
Benutzerkonto durch ein selbstgewähltes neues Losungswort zu
ersetzen.
Die Vorlesung führt in Theorie und Praxis in die Prinzipien und
Konzepte des funktionalen Programmierstils ein und spannt dabei den
Bogen von den Grundlagen bis zur Anwendung. In der
vorlesungsbegleitenden Plenumsübung
Haskell
Live wird am Beispiel konkreter Aufgabenstellungen 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 Übungsteil wird der funktionale Programmierstil anhand
von Beispielen eigenständig angewendet und eingeübt und so ein
vertieftes theoretisches und praktisches Verständnis für die
Konzepte und Prinzipien funktionaler Programmierung erarbeitet und
erworben. Als Demonstrations- und Implementierungssprache wird in
Vorlesung und Übung die funktionale
state-of-the-art
Programmiersprache
Haskell
verwendet.
Die Studierenden
erhalten so ein umfassendes theoretisches und praktisches
Verständnis der Grundlagen, Prinzipien und Konzepte der
funktionalen Programmierung und lernen, diese auf ihre Eignung zur
Lösung programmiertechnischer Aufgaben zu bewerten und
zielorientiert und angemessen im funktionalen Programmierstil
einzusetzen und anzuwenden.
- Teil I: Einführung
- Motivation
- Grundlagen von Haskell
- Rekursion und Rekursionstypen
- Teil II: Applikative Programmierung
- Auswertung von Ausdrücken
- Programmentwicklung und Programmverstehen
- Datentypdeklarationen
- Teil III: Funktionale Programmierung
- Funktionen höherer Ordnung
- Parametrische und ad hoc Polymorphie
- Teil IV: Fundierung funktionaler Programmierung
- Auswertungsstrategien
- Formale Rechenmodelle
- Lambda-Kalkül
- Teil V: Ergänzungen und weiterführende Konzepte
- Muster
- Module
- Ein- und Ausgabe
- Programmierprinzipien mit Strömen und Funktionalen
- Monomorphe und polymorphe Typinferenz
- Fehlerbehandlung
- Teil VI: Resümee und Perspektiven
- Zusammenfassung und Ausblick
In der Lehrveranstaltung wird die Programmiersprache
Haskell zur praktischen
Illustration funktionaler Programmierung verwendet; in der Übung
wird der für viele Plattformen frei verfügbare
Haskell-Interpreter
Hugs 98
verwendet.
Für die Übungsaufgaben werden auf dem Aufgabenblatt oder auf
der Webseite der Lehrveranstaltung bei Bedarf einige Testfälle
angegeben. Diese fallweise angegebenen Testfälle sind
nur dazu gedacht, die erwartete
Signatur, insbesondere die Reihenfolge von Argumenten, deutlich zu
machen. Ein weitergehendes eigenständiges Testen der Programme
können die Testfälle nicht ersetzen. Sie sind dazu nicht
gedacht und nicht geeignet.
Lehrveranstaltung
|
Inhalt
|
Folien
|
Hinweise
|
Vorlesung
| Teil I bis Teil VI, Literatur, Anhang
| pdf
| Stand: 07.12.2016
|
Vorbesprechung
| Motivation,
Organisatorisches
| pdf
| Stand: 04.10.2016
|
Übung
|
Abgabetermin
|
Angabe
|
Hinweise und Bemerkungen
|
07.12.2016
| 14.12.2016 (15:00)
|
Blatt 8.pdf
| Letztes Aufgabenblatt.
|
30.11.2016
| 07.12.2016 (15:00)
|
Blatt 7.pdf
| Minimum durch Maximum ersetzt, Teilaufgabe 3;
Typklasse Show ergänzt, verschiedene Teilaufgaben (01.12.2016, 17:00 Uhr)
|
23.11.2016
| 30.11.2016 (15:00 Uhr)
|
Blatt 6.pdf
| Typkonstruktoren und Signaturen umbenannt zur Auflösung von Namenskonflikten (25.11.2016, 15:00 Uhr)
|
16.11.2016
| 23.11.2015 (15:00)
|
Blatt 5.pdf
| Keine.
|
09.11.2016
| 16.11.2016 (15:00 Uhr)
|
Blatt 4.pdf
| Nächste Vorlesung am Di, 22.11.2016 (s.o).
|
02.11.2016
| 09.11.2016 (15:00 Uhr)
|
Blatt 3.pdf
| Keine.
|
24.10.2016
| 02.11.2016 (15:00 Uhr)
|
Blatt 2.pdf
| Wg. Nationalfeiertag vorzeitige Aufgabenausgabe.
|
17.10.2016
| 26.10.2016 (15:00 Uhr)
|
Blatt 1.pdf
| Frist Zweitabgabe: Siehe den für alle Aufgabenblätter geltenden
Hinweis auf Aufgabenblatt 1 (Abschnitt "Abgaben und Zweitabgaben...").
(Wg. Nationalfeiertag vorzeitige Aufgabenausgabe)
|
Übung
Für die Lösungen der Aufgabenblätter werden in
Abhängigkeit der Güte der Lösungen unterschiedlich
viele Punkte vergeben. Pro Aufgabenblatt sind zwischen 0 und maximal
100 Punkte möglich. Für jedes Aufgabenblatt gibt es dabei zwei
Abgabetermine, wobei sich die Gesamtpunktezahl für ein
Aufgabenblatt nach der Formel "Gesamtpunktezahl = (Punkte für Lösung
zum Erstabgabetermin + Punkte für Lösung zum Zweitabgabetermin) /
2". Die volle Punktzahl kann also erreicht werden, wenn alle
Lösungen zum Erstabgabetermin abgegeben werden; die halbe
Punktzahl kann erreicht werden für Lösungen, die erstmals
oder in veränderter Form zum Zweitabgabetermin abgegeben
werden. Änderungen (oder Weglassungen) von Lösungen vom
Erstabgabetermin können die Gesamtpunktezahl daher sowohl positiv als
auch negativ beeinflussen. Wenn die Lösung durch die Änderung
an Güte verliert, kann sich die erreichte Gesamtpunktezahl insgesamt
verringern.
Für eine positive Beurteilung des Übungsteils sind von den
maximal erreichbaren Punkten für alle Aufgabenblätter
mindestens 50% erforderlich, für "Befriedigend" mindestens 62.5%, für
"Gut" mindestens 75% und für "Sehr Gut" mindestens 87.5%. Bei z.B. 10
Aufgabenblättern im Semester (in diesem Semester werden es 8 und
maximal 800 Punkte) sind maximal 1.000 Punkte erreichbar. Unter der
Annahme von 10 Aufgabenblättern sind dann mindestens 500 Punkte
(50%) für eine positive Beurteilung des Übungsteils erforderlich,
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 Ü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 eine positive Beurteilung beider Teile, des Übungsteils
und des schriftlichen Prüfungsteils.
Schriftliche Prüfung
Die Beurteilung setzt sich je zur
Hälfte aus dem Erfolg bei der Ü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 in den Vorlesungsmaterialien
angegebenen wissenschaftlichen (Übersichts-) Artikel, den Sie
sich im Lauf der Vorlesungszeit selbstständig
erschließen.
Der Haupttermin für die schriftliche Prüfung ist im
Anschluss an den Vorlesungsblock. Nachtragsklausurtermine wird es zu
Beginn, in der Mitte und gegen Ende der Vorlesungszeit im
Sommersemester 2017 geben. Die genauen Termine werden in TISS
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 TISS.
Zeugnisausstellung
Zeugnisse werden zum
frühestmöglichen Zeitpunkt ausgestellt. Das ist nach nicht
positivem Abschluss des Übungsteils, nach jedem (positiven oder
negativen) Abschluss der schriftlichen Prüfung bzw. nach
Verstreichen aller schriftlichen Prüfungstermine.
Vortragender
Jens Knoop.