Funktionale Programmierung mit Haskell (LK Informatik, opp)

Vorbemerkungen


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.

WvS Haskell-Labor starten

Das Labor ist unser Standardarbeitsplatz für Haskell. Es ermöglicht das Arbeiten mit Haskell 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.


Begleitendes Material

Wir verwenden zwei Ebenen von Material:

  • WvS-Module und Arbeitsblätter: kurze, direkt am Unterricht orientierte Zusammenfassungen 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

  1. Programmierparadigmen: imperativ, deklarativ, funktional
  2. Arbeiten mit dem Haskell-Labor; Ausdrücke auswerten
  3. Datentypen und Typen von Ausdrücken
  4. Einfache Funktionen definieren und anwenden
  5. Funktionen mit mehreren Parametern
  6. Fallunterscheidungen mit Guards
  7. Pattern Matching
  8. Festigung und Fehleranalyse

Rekursion und Listen folgen in späteren Modulen.


Modul 1 – Einstieg in Haskell

Ziel: Sie lernen die Grundidee funktionaler Programmierung kennen, arbeiten erstmals im WvS Haskell-Labor und definieren eine erste eigene Funktion.

1. Eine andere Art zu programmieren

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.

2. Erste Experimente im Labor

Probieren Sie die folgenden Ausdrücke aus. Notieren Sie jeweils das Ergebnis und eine Vermutung zur Bedeutung.

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 hier zunächst nur ein Ausblick. Sie müssen diese beiden Funktionen an dieser Stelle noch nicht vollständig erklären können.

3. Die erste eigene Funktion

Legen Sie eine Haskell-Datei first.hs an und definieren Sie:

square :: Int -> Int
square x = x^2

Testen Sie zum Beispiel:

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?

4. Kleine Transferaufgaben

Definieren und testen Sie eigene Funktionen:

double :: Int -> Int
plusTen :: Int -> Int
cube :: Int -> Int

Das Arbeitsblatt Haskell – Modul 1 finden Sie im Anhang dieser Seite.


Zum Nachlesen

Für Modul 1 sind im Puhlmann-Skript besonders die Abschnitte zur Einordnung funktionaler Programmierung, zu Haskell und Hugs sowie der Beginn von Alles hat seinen Typ hilfreich. Die Darstellung ist ausführlicher als unser Unterrichtsskript und eignet sich deshalb gut zum Nachschlagen.


Ä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.