Rekursion

Bisher haben wir uns nicht darum gekümmert, wie man Anweisungen wiederholt ausführen kann, also wie man Schleifen verwendet. Der Trick ist: es gibt keine Schleifen in Haskell. Wenn Sie Code mehrfach ausführen wollen oder müssen, dann verwenden Sie Rekursion.

Beispielweise, wenn man eine Funktion schreiben will, die die Integer-Elemente einer Liste zusammenaddiert:

addList :: [Int] -> Int
addList [] = 0
addList (x:xs) = x + addList xs

Achten Sie darauf, dass eine Rekursion irgendwann endet. Wollen Sie drei Zahlen in einem Tupel sortieren, könnte das folgendermaßen aussehen:

tupsort :: (Int, Int, Int) -> (Int, Int, Int)
tupsort (a,b,c) 
    | a > b = tupsort (b, a, c)
    | b > c = tupsort (a, c, b)
    | otherwise = (a,b,c)

Zunächst wird geprüft, ob der erste Wert größer als der zweite ist: falls ja, werden diese beiden Werte getauscht und die Funktion erneut aufgerufen (dh. wir wissen, dass die ersten beiden Werte in der richtigen Reihenfolge stehen müssen). Stehen die ersten beiden Werte in der richten Reihenfolge, wird der zweite mit dem dritten Wert verglichen. Stehen die falsch, werden sie getauscht und die Funktion erneut aufgerufen (beachte: dann wird wieder geprüft, ob die ersten beiden in der richtigen Reihenfolge stehen), steht auch der zweite und dritte Wert richtig, wird das Tupel zurückgeliefert.