Pure Funktionen in Haskell definieren

Eine pure Funktion ist eine Funktion, die keine Ausgabe tätigt, dh. eine Funktion, die lediglich Berechnungen ausführt und das Ergebnis der Berechnung zurückliefert. Haskell macht eine deutliche Unterscheidung zwischen puren Funktionen und nicht-puren Funktionen (dazu mehr unter :!: Ein-/Ausgabe).

Eine Funktion braucht zunächst (bis auf weiteres) einen Namen, eine Liste von Parametern (mit Datentyp) und einen Rückgabewert. Aus C sind Ihnen vielleicht Funktionsköpfe bekannt, die folgendes Muster aufweisen:

int myfunc ( int a, int b, int c, float xyz );

Das heißt, die Funktion myfunc hat einen Integer-Rückgabetyp, nimmt drei Integer-Parameter und einen Fließkomma-Parameter. Nun das gleiche in Haskell:

myfunc :: Int -> Int -> Int -> Float -> Int

Haskel verlangt in folgender Reihenfolge (EBNF):

<funktionsname> :: {<Datentypen für Parameter> -> } <Rückgabedatentyp>

Nach dem Funktionsnamen stehen zwei Doppelpunkte, dann folgt eine Liste von Parametern (Datentypen), mit einem Pfeil getrennt, und zum Schluss kommt der Rückgabetyp.

Funktionsrumpf

Im Funktionsrumpf stehen die eigentlichen Anweisungen, die eine Funktion ausführen soll. Bspw. könnte die obenstehende Funktion die ersten beiden Integerwerte addieren, den dritten davon abziehen und den Float-Wert unberücksichtigt lassen. Das könnte folgendermaßen implementiert werden:

myfunc :: Int -> Int -> Int -> Float -> Int
myfunc i1 i2 i3 f = (i1 + i2 - i3)

Als erstes steht der Funktionsname, dann folgen die Namen der Parameter. Am Ende steht ein „=“, rechts davon stehen die eigentlichen Anweisungen. Betrachten Sie diese Definition wie eine mathematische Definition. Sie definieren also eine Mathematische Funktion mit den Parametern (i1, i2, i3, f), die folgendermaßen berechnet wird:

myfunc(i_1, i_2, i_3, f) = (i_1 + i_2 - i_3)