Logische Ausdrücke

In Haskell gibt es auch logische Operatoren und Ausdrücke deren Ergebnis ein Wahrheitswert ist. Zum einen kann eine Funktion einen Bool-Wert zurückgeben, zum anderen können mit Bool-Werten Vergleiche angestellt werden.

Bool zurückgeben

Will man bspw. eine Funktion schreiben, die einen übergebenen Wert mit einem Festwert vergleicht, ist es notwendig Bool-Werte zurückzuliefern. Dazu definieren wir den Funktionskopf:

myfunc :: Int -> Bool

Nun folgt der Vergleich mit dem Festwert (hier 3) und das zurückliefern dieses logischen Ausdrucks:

myfunc a = a == 3

Will ich nun aus einer anderen Funktion diese Funktion rufen, könnte das folgendermaßen aussehen:

mymain :: Int -> Int
mymain a = if ( myfunc a == True ) then a
                                   else 4

Diese Funktion gibt also entweder 3 zurück (wenn a == 3 stimmt, ist a 3, damit wird 3 zurückgeliefert), oder wenn a nicht 3 ist, dann wird der Wert 4 zurückgeliefert.

if-then-else

Zu beachten ist, dass if-then-else in Haskell etwas anders funktioniert. So ist es nicht möglich eine Verzweigung mit if-then-else zu errichten, sondern lediglich wird das Ergebnis der Funktion gewählt. Des Weiteren entscheidet Haskell darüber, wohin Code gehört anhand der Einrückungstiefe. Dh, wird das else zu wenig eingerückt, wirft GHC einen Fehler und will den Code nicht übersetzen.

Guarded Commands

Als syntaktischen Zucker kann Folgendes angesehen werden, was genau das gleiche ausdrückt, wie die obige Definition von mymain:

mymain :: Int -> Int
mymain a
    | myfunc a = 3
    | otherwise = 4