Funktionale Programmierung
LVA 185.A03, VU 2.0, ECTS 3.0, 2019 W
Funktionale Programmierung
(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.
Veranstaltungstermine
Die Lehrveranstaltung beginnt mit Vorbesprechung und erstem Vortrag am
Dienstag, den 01.10.2019, 08:15 - 09:45 Uhr,
im
Informatik-Hörsaal, Treitlstr.
Datum und Zeit
| Ort
| Thema Vortrag
| Thema umgek. Klassenzimmer
|
Di, 01.10.2019, 08:15 - 09:45 Uhr
| Informatik-Hörsaal
| Teil I
| n.a. / Vorbesprechung
|
Di, 08.10.2019, 08:15 - 09:45 Uhr
| Informatik-Hörsaal
| Teil II
| Teil I
|
Mo, 21.10.2019, 08:15 - 09:45 Uhr
| Informatik-Hörsaal
| Teil III
| Teil II
|
Di, 29.10.2019, 08:15 - 09:45 Uhr
| Informatik-Hörsaal
| Teil IV
| Teil III
|
Di, 12.11.2019, 08:15 - 09:45 Uhr
| Informatik-Hörsaal
| Teil V
| Teil IV
|
Di, 26.11.2019, 08:15 - 09:45 Uhr
| Informatik-Hörsaal
| Teil VI
| Teil V
|
Di, 10.12.2019, 08:15 - 09:45 Uhr
| Informatik-Hörsaal
| Teil VII
| Teil VI
|
Terminänderungen werden hier bekanntgegeben. Die Angaben
Teil I, Teil II, Teil III, etc. beziehen sich auf die entsprechenden Teile
der Lehrveranstaltungsunterlagen.
Angabe
| Ausgabe
| Erstabgabe
| Zweitabgabe (Standardtermin; siehe "Allgemeine Hinweise" für Details)
| max. Punkte
| zugeh. ÜG-Termine
|
1
| Montag, 07.10.2019
| Montag, 14.10.2019
| Montag, 21.10.2019
| 50
| KW 43: 21.-24.10.2019
|
2
| Montag, 14.10.2019
| Montag, 21.10.2019
| Montag, 28.10.2019
| 50
| KW 44: 28.-31.10.2019
|
3
| Montag, 21.10.2019
| Montag, 28.10.2019
| Montag, 04.11.2019
| 50
| KW 45: 04.-07.11.2019
|
4
| Montag, 28.10.2019
| Montag, 04.11.2019
| Montag, 11.11.2019
| 50
| KW 46: 11.-14.11.2019
|
5
| Montag, 11.11.2019
| Montag, 18.11.2019
| Montag, 25.11.2019
| 100
| KW 48: 25.-28.11.2019
|
6
| Montag, 18.11.2019
| Montag, 25.11.2019
| Montag, 02.12.2019
| 100
| KW 49: 02.-05.12.2019
|
7
| Montag, 25.11.2019
| Montag, 02.12.2019
| Montag, 09.12.2019
| 100
| KW 50: 09.-12.12.2019
|
Tutoren stehen beginnend mit Freitag, den 11.10.2019, regelmäßig
zu folgender Zeit für Fragen und indivuelle Betreuung im
complang-Labor
zur Verfügung.
Freitag (ab Fr, 11.10.2019)
| 12:00 Uhr - 13:00 Uhr
|
Anmeldung
Die Anmeldung zur Lehrveranstaltung erfolgt über
TISS/185.A03
und ist bis Fr, 04.10.2019, 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 Zugangswort werden jedem
Teilnehmer durch Nachricht an die Standardadresse e-Matr.Nr@student.tuwien.ac.at mitgeteilt. Dieses
erste Zugangswort ist im Zuge des ersten Einbuchens auf das
Benutzerkonto durch ein selbstgewähltes neues Zugangswort 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 den
vorlesungsbegleitenden Übungen
wird am Beispiel konkreter Aufgabenstellungen praktisch
vorgeführt und diskutiert, wie sich diese zur Lösung
einsetzen lassen. Dabei sollen 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
- Teil II: Grundlagen
- Elementare Typen, Tupel, Listen, Zeichenreihen
- Funktionen
- Typsynonyme, neue Typen, Typklassen
- Datentypdeklarationen, algebraische Typen
- Muster und mehr
- Teil III: Applikative Programmierung
- Rekursion
- Auswertung von Ausdrücken
- Programmentwicklung, Programmverstehen
- Teil IV: Funktionale Programmierung
- Funktionen höherer Ordnung
- Polymorphie
- Teil V: Fundierung funktionaler Programmierung
- Lambda-Kalkül
- Auswertungsordnungen
- Typprüfung, Typinferenz
- Teil VI: Weiterführende Konzepte
- Ein- und Ausgabe
- Fehlerbehandlung
- Module
- Programmierprinzipien, Programmieren mit
Strömen und Funktionen höherer Ordnung
- Teil VII: Abschluss, Ausblick
- Abschließendes, Rückblick, Ausblick
- Literaturverzeichnis
- Anhänge
- Formale Rechenmodelle
- Andere funktionale Sprachen
- Implementierungsaspekte
- Ausgewählte Leseempfehlungen
- Simon Thompson. Haskell: The Craft of Functional Programming.
Addison-Wesley/Pearson, 3. Auflage, 2011.
- Ernst-Erich Doberkat. Haskell: Eine Einführung für
Objektorientierte. Oldenbourg Verlag, 2012.
- Peter Pepper. Funktionale Programmierung in OPAL, ML,
Haskell und Gofer. Springer-V., 2. Auflage, 2003.
- Simon Peyton Jones (Hrsg.). Haskell 98: Language and Libraries.
The Revised Report. Cambridge University Press, 2003.
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 VII, Literaturverzeichnis, Anhänge A-F
| pdf
| Stand: 11.12.2019
|
Vorbesprechung
| Motivation,
Organisatorisches
| pdf
| Stand: 28.10.2019
Termin und Ort
von Vorbesprechung und erster Vorlesung:
Di, 01.10.2019,
08:15 - 09:45 Uhr,
Informatik-Hörsaal, Treitlstr.
|
|
| pdf
| Archiv: Folien der Vorbesprechung vom 01.10.2019 (Stand: 30.09.2019)
|
Ergänzungen
| Leistungsnachweise, Anwesenheitspflicht,
Erwartungen
| pdf
| Stand: 28.10.2019
Ergänzungen zur Vorbesprechung
|
Angabe vom
|
Abgabetermin für Erstabgabe
|
Angabenblatt
|
Hinweise und Bemerkungen
|
Mo, 25.11.2019
| Mo, 02.12.2019 (12:00 Uhr)
|
Angabe 7.pdf
| Letzte Angabe.
|
Mo, 18.11.2019
| Mo, 25.11.2019 (12:00 Uhr)
|
Angabe 6.pdf
| Keine.
|
Mo, 11.11.2019
| Mo, 18.11.2019 (12:00 Uhr)
|
Angabe 5.pdf
| Keine.
|
Mo, 28.10.2019
| Mo, 04.11.2019 (12:00 Uhr)
|
Angabe 4.pdf
| Achtung: Literates
Haskell-Skript
gefordert!
|
Mo, 21.10.2019
| Mo, 28.10.2019 (12:00 Uhr)
|
Angabe 3.pdf
| Achtung: Literates
Haskell-Skript
gefordert!
|
Mo, 14.10.2019
| Mo, 21.10.2019 (12:00 Uhr)
|
Angabe 2.pdf
| Keine.
|
Mo, 07.10.2019
| Mo, 14.10.2019 (12:00 Uhr)
|
Angabe 1.pdf
| Frist Zweitabgabe: Siehe "Allgemeine Hinweise" zu Organisation und Ablauf der Übung (Abschnitt "Abgabezeitpunkt für Zweitabgaben").
|
Fr, 05.07.2019
| Ohne Abgabe
|
Angabe 0.pdf
| Zur Vorbereitung (ohne Abgabe).
|
Sa, 06.07.2019
|
| Allgemeine Hinweise
| Allgemeine Hinweise zu Organisation und Ablauf der Übung.
|
Übung
Programmiertechnische Aufgaben (beurteilt).
Für die Lösung der Programmieraufgaben sind pro Angabe
zwischen 0 und 50 (Angaben 1 bis 4) bzw. 100 Punkten (Angaben 5 bis 7)
möglich. Für jede Angabe gibt es zwei Abgabetermine. Die
für eine Angabe erreichte Punktzahl ist die
Hälfte der Punktsumme der beiden Abgaben für diese Angabe.
Änderungen an den Programmen der Erstabgabe für die Zweitabgabe
können deshalb die insgesamt erreichten Punkte für eine Angabe
positiv oder auch negativ beeinflussen.
Für eine positive Beurteilung des Übungsteils sind von den
maximal für alle Angaben erreichbaren Punkten
mindestens 50% erforderlich, für "befriedigend" mindestens 62.5%, für
"gut" mindestens 75% und für "sehr gut" mindestens 87.5%.
Sind zum Beispiel für alle Angaben insgesamt 500 Punkte erreichbar,
sind für eine positive Beurteilung des Übungsteils
mindestens 250 Punkte (50%) erforderlich, für "befriedigend" mindestens
312.5 (62.5%), für "gut" mindestens 375 (75%) und für "sehr gut"
mindestens 437.5 Punkte (87.5%).
Nichtprogrammiertechnische Aufgaben (unbeurteilt).
Nichtprogrammiertechnische Aufgaben ergänzen die
die programmiertechnischen Aufgaben und erweitern die
Übungsmöglichkeiten. Löungsvorschläge
für die nichtprogrammiertechnischen Aufgaben werden
nicht abgegeben und nicht beurteilt, sondern von den
Teilnehmern in den Übungsgruppen präsentiert und
besprochen.
Selbsteinschätzungstests (unbeurteilt).
Nicht beurteilte 15min. Tests zu Beginn jedes Übungsgruppentreffens
unterstützen eine regelmäßige
Seibsteinschätzung des bisherigen Lernfortschritts
und Lernerfolgs.
Schriftliche Prüfung
Die schriftliche Prüfung (beurteilt) erfolgt über den Vorlesungs-
und Übungsstoff und zwei zusammengehörige
wissenschaftliche Artikel (siehe auch
Unterlagen zur
Lehrveranstaltungsvorbesprechung), die Sie sich im Lauf der
Lehrveranstaltung selbstständig erschließen:
- Konrad Hinsen. The Promises
of Functional Programming.
Computing in Science and Engineering 11(4): 86-90, 2009.
- Konstantin Läufer, Geoge K. Thiruvathukal.
The Promises of Typed, Pure, and
Lazy Functional Programming: Part II.
Computing in Science and Engineering 11(5): 68-75, 2009.
Der Haupttermin für die schriftliche Prüfung ist
im Januar 2020 im Anschluss an den Vortrags- und Übungsblock.
Nachtragstermine für die schriftliche Prüfung
gibt es zu Beginn, in der Mitte und gegen Ende der Vorlesungszeit
im Sommersemester 2020. Die genauen Termine sind in
TISS bekanntgegeben.
Eine Anmeldung zu den schriftlichen Prüfungen ist jeweils
erforderlich und erfolgt über
TISS.
Nach Ende der Vorlesungszeit im Sommersemester gibt es
keine weiteren Nachtragstermine mehr. Bis dahin noch nicht
ausgestellte Zeugnisse werden dann ausgestellt.
Gesamtnote
Die Gesamtnote ergibt sich im Verhältnis 1 zu 1
aus den Beurteilungen für den Übungsteil und
die schriftliche Prüfung, falls beide Beurteilungen
für sich positiv sind, sonst ungenügend.
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.
Änderung des Prüfungsmodus (13.12.2019)
Es gibt folgende Änderung des Prüfungsmodus:
- Nach positiver Teilnahme am Übungsteil sind nur mehr zwei
Prüfungsantritte möglich. Danach verfällt der positive Übungsteil. Für
weitere Antritte muss die Lehrveranstaltung von Anfang nochmals neu
besucht werden.
- Pro Semester wird höchstens ein Zeugnis ausgestellt.
Vortragender
Jens Knoop.