Subato

 

Funktionale Programmierung (SS 2022)

 

Responsible Lecturer:
Sven Eric Panitz

Lecturers

  • Sven Eric Panitz
Lecture Times
  • Vorlesung Tue 10:00 C407
Training Groups
  1. Praktikum Tue 11:45 C001
    (Sven Eric Panitz)

Exercise Sheets
Resource Files

 


Willkommen zum Wahl-Modul ›Funktionale Programmierung‹.

Leistungserbringung

In diesem Semester ist die Prüfungsform: Praktische Tätigkeit mit Fachgespräch. Hierzu gibt es zunächst Aufgaben, die in Form von Lehrbriefen formuliert sind und einzelne Aspekte der Programmierung in Haskell einüben. Im zweiten Teil des Semester ist dann ein eigenes gewähltes Projekt umzusetzen. Hierzu gibt es eine Reihe von Projektideen und Beispielen, an denen man sich orientieren kann.

Gesammelte Lehrbriefe

Für dieses Modul existiert kein eigenes Skript, sondern einzelne Lehrbriefe mit Übungsaufgaben. Die Lehrbriefe sind jeweils im Kontext der Aufgabe zu finden, deren Lösung auf subato automatisch getestet wird.

Zur besseren Übersicht hier die Links direkt zu den Lehrbriefen zum direkten Zugriff.

Grundlagen

  1. Ersten Funktionen
  2. Standardlisten
  3. Eine Mengenimplementierung
  4. Funktionale Schleifen un Faltungen
  5. State in Haskell (und Monaden)
  6. Parser-Kombinator Bibliothek
  7. Nebenläufigkeit (und ein bisschen Parallelität)
  8. HOpenGL

Beispielprojekte

  1. Polynomberechnungen
  2. Kreuzworträtsel
  3. Sudoku
  4. Tetris
  5. Audio Verarbeitung
  6. RSA Kryptosysteme
  7. Spielbäume
  8. Gui Programmierung mit Gtk
  9. Lambda Kalkül
  10. XML Struktur und XPath Achsen

Haskellprogramme

  1. Das Notensatzprogramm Tinte
  2. Modellbahnsteuerung

Video Kurs von Graham Hutton

Es gibt zwei schöne Haskell Kurse von Graham Hutton von der University of Nottingham:

Das zum Kurs zugehörige Lehrbuch:

Discount link: http://tinyurl.com/25pct-off
 

externe Links

 

Lessons
April 26, 2022, 10:00 AM
Auswertungsstrategien:
  • normale Auswertung: Redex, der als erster anfängt. Nicht-strikte auch verzögerte Auswertung genannt.
  • applikative Auswertung: Redex, der als erster endet. Strikte Auswertung.
  • lazy evaluation: nicht-strikt mit sharing. Graph Rewriting.

Simulation verzögerter Auswertung in Java:

<A> A bot(){return bot();}
<A,B> B k(A a, B b){return b;}
k(bot(),42)
<A> A wenn(boolean b, A a1, A a2){return b?a1:a2;}
wenn(true,42,bot())
interface Lazy<A>{ A get();}
<A> A wenn(boolean b, Lazy<A> a1, Lazy<A> a2){return b?a1.get():a2.get();}
wenn(true,() -> 42, () -> bot())

April 19, 2022, 10:00 AM
  • Funktionen definieren in Haskell
  • numerische Typen: Int, Integer, Rational....
  • Tupeltypen
  • Funktionstypen
  • Currying

interface Bi<A,B,C> extends BiFunction<A,B,C>{
  default Function<B,C> curry(A a){
    return (b)->apply(a,b);
   }
}
Bi<Integer,Integer,Integer> f = (x,y) -> x+y
var f2 = f.curry(1)

April 12, 2022, 10:00 AM
Geschichtlicher Überblick
  • Geschichtlicher Überblick
  • Exkurs: Emacs Lisp
  • Abgrenzung: imperativ vs funktional