Links und Funktionen
Sprachumschaltung

Navigationspfad
Sie sind hier: Startseite / Lehre / WS 2014/15 / Fortgeschrittene Funktionale Programmierung


Inhaltsbereich

Fortgeschrittene Funktionale Programmierung

Vorlesung, 2-std., Fr 10-12, Jost; Übungen 2-std., Mi 16-18 & 18-20, Jost

Aktuelles


Inhalt

Aufbauend auf die Einführung in die funktionale Programmierung im Rahmen der Lehrveranstaltung "Programmierung und Modellierung" (Semester 2), studieren wir fortgeschrittene Techniken der funktionalen Programmierung.

Dies umfasst die Behandlung von I/O und Effekten, Nebenläufige und Parallele Programme, Testen und Verifikation, sowie die Entwicklung ereignisgesteuerter Anwendungen wie Webapplikationen und graphischer Benutzeroberflächen. 

Kenntnisse der Programmiersprache Haskell werden vorausgesetzt. Solide Vorkenntnisse einer anderen funktionalen Sprache (z.B. SML) reichen ebenfalls aus, da zu Beginn des Kurses Haskell-Syntax und die wichtigsten Grundlagen kurz wiederholt werden.


Organisation

  • Umfang: 2+2 Semesterwochenstunden (6 ECTS für Modul "Vertiefende Themen der Informatik")
  • Vorlesung und Übung: Dr. Steffen Jost
  • Prüfung: Der Kurs wird mit der Implementierung eines kleinen Software-Projektes abgeschlossen werden.

 


Zeit und Ort

VeranstaltungZeitOrtBeginn
Vorlesung Fr, 10-12 Uhr

C 113 (Theresienstr. 41)

10.10.2014
Übung Mi, 16-18 Uhr U 127 (Oettingenstr. 67) 22.10.2014
Übung Mi, 18-20 Uhr     027 (Oettingenstr. 67) 15.10.2014

Zeitplanung Projektpräsentationen 

Ort: Raum 057 an der Oettingenstraße 

ZeitDienstag 24.3.15Mittwoch 25.3.15Donnerstag 26.3.15
10:00 (frei) (frei) Interaktives Infoterminal (MM) 
10:30 Mühle-Client (FM) Hic Hac Hoe (PM) Klausurtrainer (MA, AI)
11:00 Arduino-Zeichemaschine (CN) Explicit Semantic Analysis (EG) Secret Santa (SGC, DL, FS)
11:30 Schafkopf (QS) 3D Punktwolken (MM, AN) (frei)
Mittag
13:00
13:30 GO-Server (SW) Beveragemanagement on Event (SL) Planiworx (NI,MR) *
14:00 WebSocket-Server/Client (DD) Putzmonade (AK, LS) Etherpad (HB)
14:30 Skript-Interpreter (MB)
15:00 Adventure-Game (EB, FR)
15:30 Ticketsystem für Bit-HD (FE) Scoutanize (FS)

Paralleles Rechnen mit Grafikkarte (DS)

Vortrag entfällt. Information zum Projekt gibt es hier und hier.

16:00
16:30
17:00 Tetris (TW)
17:30 Poker (GH, JL)

* = nicht öffentlich


Material

Vorlesungsfolien und Nachrichten finden Sie auf folgender Unterseite, welche auch einen RSS-Feed anbietet.

Übungsblätter erhalten Sie per UniworX.


Prüfung durch Abschlussprojekt

Die Abschlussprojekte sollen demonstrieren, dass der Teilnehmer die Inhalte der Vorlesung verstanden hat und anwenden kann. Je nach Umfang reicht es, wenn 2-3 Vorlesungsthemen primär eingesetzt werden. Manche Projektvorschläge lassen sich auch offensichtlich gut kombinieren, z.B. 1) & 2). Die Projekte dürfen Einzeln oder in Teams von bis zu 3 Personen durchgeführt werden. Am Ende des Semesters muss das Projekt in einer kurzen Präsentation vorgestellt werden.

  • AI für ein Spiel:
    Es wird eine AI für ein einfaches Brettspiel implementiert. Dabei kann die Ein- und Ausgabe der Spielsituation auch ohne Grafik einfach über die Konsole oder mit Textdateien erfolgen. Auch ein rechenintensives Hilfstool nach Art von A6-3 wäre denkbar.
    Bei der Berechnung können unter anderem beispielsweise (Breitensuche+)Laziness, Paralleles Rechnen und auch Nebenläufigkeit (zum Ermitteln des besten Zuges nach X Sekunden Rechenzeit) eingestezt werden.
    Natürlich kann auch gerne eine GUI realisiert werden. Dieses Thema werden wir jedoch höchstens erst nach der Weihnachstspause behandeln.

  • Webserver:
    In Abschnitt 8 der Vorlesung werden wir das Yesod Framework behandeln. Damit kann man sehr schnell einen effizienten Webserver mit komfortabler Datenbankanbindung realisieren. Wer sich ein wenig mit HTML auskennt, kann hier schon gut aussehende Programme implementieren. Hauptaugenmerk liegt aber natürlich auf den Server-seitig ausgeführten Haskell - wer alles Client-Seitig in Javascript ausführt, muss dass natürlich erklären. Neben Yesod lassen sich je nach Anwendung beliebige Vorlesungsthemen anwenden.

    Ideen:
    Chat/Messenging mit Komfort (da sich einfache Implementationen bereits fertig in den Yesod-Tutorials finden, sollte Ihr Projekt etwas darüber hinausgehen),
    UniworX-Clone,
    Web-GUI für eine aufwendig Berechnung (z.B. Spiel-AI),
    Spiel per Web-GUI,
    Terminplaner,
    Aggregator/Verwaltung externer Webseiten, etc.

    Aber auch ohne Yesod-Framework lässt sich sicherlich ein interessanter nebenläufiger Server realisieren, wenn keine HTML Generierung nötig ist, z.B. der Host für Kommunikation, Spiel, etc.

  • Interpreter/Parser für ein Programmiersprachenfragment:
    In Übungen A2-1, A3-3, A5-3 und Folien 4-23 haben wir alle benötigten Bausteine gesehen, um eine Programmiersprache zu parsen und auszuwerten. Die Beispiele für den Lambda-Kalkül könnten erweitert werden, oder man behandelt eine andere Programmiersprache, bzw. ein Fragment davon.

  • Kommandozeilen-Tool:
    Ein einfaches Tool zur Dateiverarbeitung auf der Kommandozeile.
    Das Buch "Real-World Haskell" behandelt Beispiele dazu. Vielleicht habt Ihr Euch schon immer ein Tool gewünscht, dass euch eine spezielle Statistik über eine Textdatei erstellt, aufwändigen aber eigentlich simplen LaTeX-Code erstellt, oder in eine Haskell-Datei schön formatiert und Typsignaturen einfügt.

Ein wichtiger Punkt bei der Projektauswahl sollte auch sein, über verschiedene Ausbaustufen zu verfügen, damit das Projekt nicht gleich komplett scheitert oder zu einfach ausfällt. Z.B. kann man bei einem UniworX-Clone ja erst mal nur Notenerfassung oder nur Hausaufgabenübermittlung behandeln, und je nach Aufwand dann erweitern!

Eigene Ideen sind aber ausdrücklich willkommen! Gibt es nicht etwas, dass Ihr schon immer implementieren wolltet? Implementiert es einfach in Haskell!

Projektpräsentation

Termine: 24., 25. & 26. März

Die Präsentation des Projektes sollte je nach Teilnehmerzahl maximal 15-25 Minuten dauern. Die Präsentation muss beinhalten:

  • Demonstration des Endprodukts
  • Diskussion des Codes:
    • Wo wurden welche Techniken aus der Vorlesung wie eingesetzt?
    • Welche interessanten Probleme traten auf; wie wurden diese gelöst? 
  • Welche Bibliotheken oder Code-Vorlagen wurden genutzt?
  • Bei 2-3 Teilnehmern: Wer hat sich primär um welche Teiles des Projektes gekümmert?

Anschließend findet eine kurze Befragung aller Teilnehmer zum Projekt/Code statt. Bewertet wird neben Umfang des Projekts und den eingesetzten Techniken vor allem die Eleganz und Klarheit des Codes selbst!


Literatur


Weitere Informationen

 

Artikelaktionen


Funktionsleiste