====== 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): :: { -> } 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)