Vorbemerkungen
Ein Votum für die funktionale Programmierung (englisch!): Hier sind besonders der Abstract und die Zusammenfassung interessant.
Wo wird die funktionale Programmierung überhaupt eingesetzt?
Was sagt ChatGPT zur funktionalen Programmierung?
Funktionale Programmierung mit Haskell
Haskell ist eine rein funktionale Programmiersprache. Im Leistungskurs verwenden wir Haskell vor allem, um ein anderes Programmierparadigma kennenzulernen.
Statt Speicherzustände schrittweise durch Zuweisungen zu verändern, werden Ausdrücke ausgewertet und Funktionen im mathematischen Sinn definiert.
Unser Arbeitsplatz: das WvS Haskell-Labor
Im Unterricht arbeiten wir in erster Linie mit unserem webbasierten WvS Haskell-Labor.
Das Labor ist unser Standardarbeitsplatz für Haskell und ermöglicht das Arbeiten ohne eine lokale Installation auf dem eigenen Rechner.
Daneben gibt es weitere Haskell-Umgebungen:
- GHCi ist die interaktive Umgebung des Glasgow Haskell Compilers (GHC).
- WinHugs/Hugs ist eine ältere, sehr einfache Haskell-98-Umgebung. Viele ältere WvS-Materialien verwenden deshalb noch den Hugs-Prompt.
Die grundlegenden Haskell-Ausdrücke und Funktionsdefinitionen, die wir im Unterricht verwenden, lassen sich in diesen Umgebungen weitgehend gleich lesen.
Material zum Unterricht
- WvS-Module: Die Abschnitte auf dieser Seite begleiten unmittelbar den Unterricht und enthalten Erklärungen, Beispiele und Aufgaben.
- Skript von Dr. Hermann Puhlmann: ausführlicheres fachliches Nachschlagewerk zur funktionalen Programmierung mit Haskell. Es dient zur Vertiefung und zum Nachlesen und wird nicht einfach Seite für Seite abgearbeitet.
Hinweis: Für Leistungsüberprüfungen ist immer der im Unterricht behandelte Stoff maßgeblich. Materialien auf dieser Seite können auch weiterführende Inhalte enthalten.
Unterrichtsplanung – erste Module
- Programmierparadigmen: imperativ, deklarativ, funktional
- Arbeiten mit dem Haskell-Labor; Ausdrücke auswerten
- Datentypen und Typen von Ausdrücken
- Einfache Funktionen definieren und anwenden
- Funktionen mit mehreren Parametern
- Fallunterscheidungen mit Guards
- Pattern Matching
- Festigung und Fehleranalyse
Rekursion und Listen folgen in späteren Modulen.
Modul 1 – Einstieg in Haskell
Ziel: Sie sammeln erste praktische Erfahrungen mit Haskell, untersuchen Ausdrücke, definieren eine eigene Funktion und lernen eine erste Möglichkeit für Fallunterscheidungen kennen.
1. Erste Experimente im Haskell-Labor
Starten Sie das WvS Haskell-Labor. Probieren Sie die folgenden Ausdrücke aus. Notieren Sie jeweils das Ergebnis und stellen Sie Vermutungen über die Bedeutung der einzelnen Teile an.
13 + 42
2 ^ 10
(+) 16 26
5 == 5
5 /= 7
map (*2) [1,2,3]
filter (>5) [8,4,1,6,10]
Hinweis: Die Funktionen map und filter sind zunächst nur ein Ausblick. Sie müssen deren Funktionsweise an dieser Stelle noch nicht vollständig erklären können.
2. Was ist hier anders?
Imperative Programme beschreiben typischerweise, wie ein Problem durch eine Folge von Anweisungen und Zustandsänderungen gelöst wird.
In Haskell steht stärker im Mittelpunkt, was berechnet werden soll. Ein funktionales Programm besteht im Kern aus Funktionsdefinitionen; die Ausführung erfolgt durch die Auswertung von Ausdrücken.
Eine wichtige Eigenschaft reiner Funktionen ist:
Bei gleicher Eingabe entsteht immer die gleiche Ausgabe.
3. Die erste eigene Funktion
Legen Sie eine Haskell-Datei first.hs an und speichern Sie darin:
square :: Int -> Int
square x = x^2
Laden Sie die Datei im Haskell-Labor und testen Sie die Funktion zum Beispiel mit:
square 4
square 10
square (-3)
square 2.5
Untersuchen Sie dabei insbesondere:
- Was bedeutet ::?
- Was bedeutet Int -> Int?
- Wofür steht x?
- Welche Bedeutung hat das Gleichheitszeichen in einer Funktionsdefinition?
- Warum führt square 2.5 bei dieser Typdefinition zu einem Problem?
- Lässt sich square auch auf eine andere Weise definieren?
4. Eine Funktion mit Fallunterscheidungen
Erweitern Sie first.hs um folgende Funktion:
strange :: Int -> Int
strange x
| x > 10 = div (x+3) 2
| x < 0 = (div (x*x) 3) + 5
| otherwise = square x
Hinweis: Der senkrechte Strich | befindet sich je nach Tastatur und Betriebssystem an unterschiedlichen Stellen und kann eine zusätzliche Auswahltaste wie Alt oder AltGr erfordern.
Speichern bzw. aktualisieren Sie die Datei im Haskell-Labor und testen Sie strange mit verschiedenen Werten.
Verwenden Sie dabei bewusst Eingaben aus allen drei Bereichen, zum Beispiel:
strange 20
strange (-6)
strange 5
Untersuchen Sie:
- Welche der drei Zeilen wird jeweils verwendet?
- Welche Bedeutung hat das Zeichen |?
- Was bewirken die Bedingungen hinter dem senkrechten Strich?
- Welche Bedeutung hat otherwise?
- Warum kann im letzten Fall die bereits definierte Funktion square verwendet werden?
Fachbegriff: Die Bedingungen hinter dem senkrechten Strich nennt man in Haskell Guards.
Weitere Aufgabe:
Entwickeln Sie zwei bis drei eigene sinnvolle Haskell-Funktionen und testen Sie diese. Nutzen Sie dabei die bisher kennengelernten Grundlagen aus den Abschnitten 1 bis 4.
Zum Nachlesen
Das im Unterricht vorgestellte und ausgegebene Puhlmann-Skript ist in seiner Darstellung ausführlicher als unser Unterrichtsmaterial und eignet sich deshalb besonders zum Nachschlagen und Vertiefen. Besonders die Abschnitte zur Einordnung funktionaler Programmierung, zu Haskell und Hugs, der Beginn von Alles hat seinen Typ sowie später der Abschnitt zu Fallunterscheidungen sind hilfreich.
Ältere Materialien und technische Hinweise
Auf dieser Seite befinden sich weiterhin ältere Materialien aus früheren Kursen. Hinweise zu WinHugs, Hugs, Installationen unter Windows, macOS oder Linux sowie spätere Themen wie Rekursion und Listen können weiterhin als Ergänzung genutzt werden. Für den aktuellen Unterricht ist jedoch das WvS Haskell-Labor der reguläre Einstieg.
| Anhang | Größe |
|---|---|
| 13.25 MB | |
| 13.6 MB |

Time in Meru 