Was ist funktionale Programmierung in Haskell?
Haskell ist eine funktionale Programmiersprache: Ein Programm besteht aus Funktionen, die Werte entgegennehmen und neue Werte zurückgeben, ohne etwas zu verändern.
Jede Funktion hat einen Typ, der vorab sagt, was hinein und was heraus kommt. So findet der Compiler viele Fehler, bevor das Programm läuft.
Am Ende dieser Lektion
Notiz
Ich kann eine kleine Haskell-Funktion und ihre Typsignatur lesen und sagen, was sie tut.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Reine Funktion | gibt bei gleicher Eingabe immer dasselbe zurück und ändert nichts | |
| Ausdruck | etwas, das einen Wert ergibt | square 12 |
| Typ | die Art eines Wertes, etwa Zahl, Text oder Wahrheitswert | |
| Typsignatur | die Zeile, die Eingabe- und Ausgabetyp einer Funktion nennt | |
| Verkettung | zwei Funktionen hintereinander schalten | f . g |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine reine Funktion hat keine Nebenwirkung
Eine reine Funktion gibt bei gleicher Eingabe immer dasselbe zurück und ändert nichts außerhalb von sich. square 7 ergibt immer 49, heute wie morgen.
In Haskell schreiben Sie den Aufruf ohne Klammern: square 7 statt square(7). Alles, was einen Wert ergibt, heißt Ausdruck. Ein Programm ist im Kern ein großer Ausdruck.
Eine reine Funktion für die Steuer
-- Beispiel: gleiche Eingabe, immer gleiche Ausgabe.
mehrwertsteuer :: Double -> Double
mehrwertsteuer preis = preis * 0.19Die Datei Basics.hs ansehen
docker exec haskell cat Basics.hsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Funktion mit 12 aufrufen
docker exec haskell ghc -e "square 12" Basics.hsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Funktion, die ja oder nein sagt
docker exec haskell ghc -e "isEven 7" Basics.hsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Typsignatur nennt Eingabe und Ausgabe
Die Zeile square :: Int -> Int heißt Typsignatur. Lesen Sie :: als „hat den Typ“ und den Pfeil als „macht aus“. Also: square macht aus einer ganzen Zahl (Int) eine ganze Zahl.
Der Typ String ist ein Text, Bool ein Wahrheitswert. Der Compiler vergleicht jeden Aufruf mit der Signatur und lehnt falsche Aufrufe ab.
Beispiel: drei Typsignaturen lesen
| Funktion | Typsignatur | Lesart |
|---|---|---|
| square | Int -> Int | Ganze Zahl hinein, ganze Zahl heraus |
| greet | String -> String | Text hinein, Text heraus |
| isEven | Int -> Bool | Ganze Zahl hinein, Wahrheitswert heraus |
| not | Bool -> Bool | Wahrheitswert hinein, Wahrheitswert heraus |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Den Typ einer Funktion erfragen
docker exec haskell ghc -e ":type square" Basics.hsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der Typ einer eingebauten Funktion
docker exec haskell ghc -e ":type not"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Text, wo eine Zahl verlangt ist
docker exec haskell ghc -e 'square "zwei"' Basics.hsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele glauben, Typfehler zeige erst das laufende Programm. Haskell prüft alle Typen vorher. Ruft ein Ausdruck square mit einem Text auf, meldet GHC den Fehler gleich und führt nichts aus. Lesen Sie die Meldung: Sie nennt den erwarteten und den gefundenen Typ.
Zwei Funktionen lassen sich verketten
Der Punkt verkettet Funktionen: f . g heißt „erst g, dann f“. Der Ausdruck (square . square) 3 rechnet erst 3 mal 3 gleich 9 und dann 9 mal 9 gleich 81.
Die Reihenfolge zählt, und sie steht rückwärts: Zuerst läuft die rechte Funktion. Das Ergebnis der rechten muss zum Eingabetyp der linken passen.
Zweimal quadrieren
docker exec haskell ghc -e "(square . square) 3" Basics.hsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Erst quadrieren, dann auf gerade prüfen
docker exec haskell ghc -e "(isEven . square) 3" Basics.hsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Funktionen in Python weiterreichen
Auch Python kann Funktionen wie Werte behandeln. Sie schreiben anwenden, zweimal und verkette: die letzte liefert eine neue Funktion zurück, die zwei andere hintereinander schaltet.
Die Funktion verkette(f, g) entspricht dem Punkt aus Haskell. Prüfen Sie zuletzt, dass die Reihenfolge zählt.