Programmierung
Sommer 2020
Abkürzung zum Übungsmaterial



Inhalte der Übungen

Im Rahmen der zur Lehrveranstaltung gehörenden Übungen wenden wir das in der Vorlesung erlernte Wissen an und versuchen mit vielen Beispielen eine anschauliche Sicht auf die folgenden Thematiken zu werfen:

  • Grundlagen der funktionalen Programmierung in Haskell
  • Unifikationsalgorithmus
  • Beweis von Programmeigenschaften mit struktureller Induktion
  • Lambda-Kalkül
  • Logikprogrammierung in Prolog
  • Abstrakte Maschinen AM0 und AM1 sowie deren Übersetzung von/nach C
  • Beweis von Programmeigenschaften mit dem Hoare-Kalkül
  • Abstrakte Maschinen mit Haskell

Informationen

Bitte beachtet stets die aktuellen Informationen auf der Website der Lehrveranstaltung. Bei Fragen oder Problemen könnt ihr euch an mich oder an Thomas Ruprecht wenden.

Aufgrund der Schließung der TU Dresden sind wir auf alternative Lehrmethoden angewiesen. Ich habe zusätzlich zum offiziellen Angebot des Lehrstuhls ein eigenes (privates) Konzept entwickelt. Dabei möchte ich meine Präsenzübungen so realitätsnah wie möglich in Online-Formate übertragen.

Praktische Aufgaben

Leider haben wir in den Übungen nicht die Zeit um allen einen funktionsfähigen Compiler und ein optimales Setup zu garantieren. Daher bitte ich euch die Informationen auf der Lehrveranstaltungswebsite zu beachten. Außerdem habe ich hier und hier einige Hinweise zusammengetragen. Wie immer sind natürliche auch Google und YouTube sehr gute Quellen für weitere Hilfe. Im Zweifelsfall hilft euch sicher auch der iFSR.

Hinweise zu Haskell Hinweise zu Prolog

Literaturempfehlungen

  • Learn You a Haskell For Great Good!
    Ein sehr gut geschriebenes Buch, kann ich nur empfehlen einmal reinzusehen. Erklärt sehr ausführlich und kurzweilig. Damit sollte jeder Haskell verstehen können.
  • Real World Haskell
    Ebenso ein sehr gutes Buch, deckt aber wesentlich mehr Inhalte ab, als wir brauchen werden.
Beide Bücher sind frei online verfügbar, sogar ohne VPN und ohne SLUB-Zugang, also perfekt für diese Zeit.

Online-Übungen

  • Ich werde hier Informationen und Materialien für meine Online-Übungen zur Verfügung stellen. Sollten größere Fehler oder organisatorische Probleme auftreten, benachrichtige ich euch zusätzlich noch per Mail.
  • Kürzere Fragen könnt ihr mir gern auch auf Telegram stellen. Ihr findet mich unter @oakoneric. Dort antworte ich erfahrungsgemäß etwas schneller als auf E-Mails.

Probeklausur

Die Probeklausur findet ihr hier. Die Zugangsdaten sind die gleichen wie für die Videos.
Die bearbeiteten Aufgaben könnt ihr mir per Mail senden, dann kann ich sie euch korrigieren. Eine Besprechung der Probeklausur machen wir nur, wenn wirklich Bedarf besteht, d.h. meldet mir diesen gern, sobald ihr Probleme habt. Die Klausur ist in meinen Augen realistisch, aber trotzdem relativ anspruchsvoll. Zeitlich solltet ihr nicht deutlich mehr als 50 bis 60 Minuten benötigen.

Evaluation

Wie in jedem Semester gab es auch diesmal eine Lehrveranstaltungsevaluation, an der einige teilgenommen haben. Ich danke allen für das Feedback (positiv und negativ) und freue mich auch weiterhin auf Kritik und Verbesserungsvorschläge von eurer Seite.

Evaluation der Übungen

Blatt Inhalte Download
1 Einführung in Haskell
  • Die Folien sind um ein paar ausführliche Hinweise ergänzt im Vergleich zu den im Video verwendeten Folien.
Slides Handout

Video
2 Haskell: Listen, Zeichenketten & Bäume
  • Meine Notizen sind in meinem OneNote-Notizbuch zu finden. Den Link dorthin findet ihr bisschen weiter oben.
  • Video der Freitagsübung: [hier] (Zugangsdaten erhaltet ihr per Mail). Danke an der Stelle an Tobias!
  • Mitschrift der Freitagsübung: [hier]
  • kommentierte Musterlösung zu Aufgabe 3 (Bäume): [hier]
Slides Handout

Code Templates [zip]

Code Lösungen [zip]

3 Haskell: Bäume & Funktionen höherer Ordnung
  • Video der Freitagsübung: [hier] (Zugangsdaten werden per Mail mitgeteilt)
  • Mitschrift der Freitagsübung: [hier]
  • kommentierte Musterlösung zu Aufgabe 2 & 3 (Funktionen höherer Ordnung): [hier]
Slides Handout

Code Templates [.hs]

Code Lösungen [.hs]

4 Haskell: Typpolymorphie & Unifikationsalgorithmus Slides Handout

Code Templates [.hs]

Code Lösungen [.hs]

5 Beweis von Programmeigenschaften - Induktion Induktion
6 Der Lambda-Kalkül Slides Handout
7 Der Lambda-Kalkül Slides
8 Prolog
  • Video der Freitagsübung: [hier]
  • Beispiele: [Familienstammbaum] & [Arithmetik]
  • Lösung (Code) zu [Aufgabe 1] & [Aufgabe 2]
  • Die Lösungen zu den (schriftlichen) Aufgaben findet ihr in den Slides, da meine Mitschriften keinen sonderlichen Mehrwert enthalten. Ansonsten findet ihr sie auch im OneNote-Notizbuch (Link siehe oben).
  • Informationen zur Probeklausur: oben
  • Etwas bessere Erklärung für die Division in Prolog: [hier]
Slides Handout

Code

9 Prolog Slides Handout

Code

10 Abstrakte Maschine AM0 Slides Handout
11 Abstrakte Maschine AM1 Slides Handout

Befehlssemantik
12 Hoare-Kalkül Slides Handout
13 H0 - ein einfacher Kern von Haskell Slides Handout
14 Zusammenfassung aller großen Inhalte
  • Wir werden nicht mehr alle Übungen durchsprechen, sondern nur diejenigen, bei denen ihr Probleme habt. Am besten ihr teilt mir die Aufgabenwünsche vorher mit!
Lösungen