Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Haskell: Funktionen und Typen

Nach dieser Lektion: Ich kann eine kleine Haskell-Funktion und ihre Typsignatur lesen und sagen, was sie tut.

Lektion, 65 Min.8 BefehleHaskell-Lab: funktionale Programmierung mit Funktionen und Typen, im Browser

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

BegriffWas er bedeutetBeispiel
Reine Funktiongibt bei gleicher Eingabe immer dasselbe zurück und ändert nichts
Ausdrucketwas, das einen Wert ergibtsquare 12
Typdie Art eines Wertes, etwa Zahl, Text oder Wahrheitswert
Typsignaturdie Zeile, die Eingabe- und Ausgabetyp einer Funktion nennt
Verkettungzwei Funktionen hintereinander schaltenf . 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

Code: haskell
-- Beispiel: gleiche Eingabe, immer gleiche Ausgabe.
mehrwertsteuer :: Double -> Double
mehrwertsteuer preis = preis * 0.19

Die Datei Basics.hs ansehen

Befehl
docker exec haskell cat Basics.hs

Hier 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

Befehl
docker exec haskell ghc -e "square 12" Basics.hs

Hier 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

Befehl
docker exec haskell ghc -e "isEven 7" Basics.hs

Hier 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

FunktionTypsignaturLesart
squareInt -> IntGanze Zahl hinein, ganze Zahl heraus
greetString -> StringText hinein, Text heraus
isEvenInt -> BoolGanze Zahl hinein, Wahrheitswert heraus
notBool -> BoolWahrheitswert hinein, Wahrheitswert heraus

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Den Typ einer Funktion erfragen

Befehl
docker exec haskell ghc -e ":type square" Basics.hs

Hier 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

Befehl
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

Befehl
docker exec haskell ghc -e 'square "zwei"' Basics.hs

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

Befehl
docker exec haskell ghc -e "(square . square) 3" Basics.hs

Hier 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

Befehl
docker exec haskell ghc -e "(isEven . square) 3" Basics.hs

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

Über dieses Lab und seinen Quellcode: Haskell-Lab: funktionale Programmierung mit Funktionen und Typen, im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.