Datentyp Boolean
Übersicht: Datentyp Boolean
Datentypdeklaration
Der Datentyp Boolean ist in der Programmiersprache Haskell bereits eingebaut.
Seine Deklaration lautet folgendermassen:
01 data Bool = False | True
|
Die Deklaration beginnt mit dem Schlüsselwort data
.
Bool
wird als Name des Datentyps eingeführt.
Nach dem Gleichheitszeichen, welches hier als Definitionssymbol dient, werden die Werte
des Datentyps False
und True
durch | getrennt aufgezählt.
Alle Namen müssen in Grossbuchstaben geschrieben werden.
Der neu eingeführte Datentyp kann in Funktionen durch Mustererkennung verwendet werden.
Werden in einer Funktion Zeichenketten gefunden, die einem Wert eines Datentyps entsprechen,
so wird dieser Datentyp erkannt und für die Funktion verwendet.
Für den Datentyp Bool
sind mehrere Funktionen vordefiniert.
Funktionsbeispiel Negation
Als Beispiel einer einfachen Funktion für Bool
dient hier die Negation:
01 not :: Bool -> Bool
02 not False = True
03 not True = False
|
Wird ein Ausdruck der Form not e
gefunden, wird dieser in folgenden Schritten ausgewertet.
1. e
wird in Normalform gebracht.
2. Der Gesamtausdruck wird nach den oben definierten Regeln ersetzt,
wenn e
zu False
oder True
auswertbar ist.
Kann e
nur zum undefinierten Wert ausgewertet werden, so ist das Funktionsergebnis
ebenfalls undefiniert. Aus diesem Grund ist <code>not</code> eine strikte Funktion.
Hierbei wird die Tatsache ausgenutzt, dass jeder Datentyp zusätzlich zu den definierten Werten
noch den undefinierten Wert beinhaltet. Die Anzahl der möglichen Werte für jeden Datentyp
wird automatisch um den undefinierten Wert erweitert.
Funktionsbeispiele Konjunktion und Disjunktion
Weitere einfache Funktionen für den Datentyp Bool
sind
Konjunktion und Negation. Sie sind folgendermassen definiert:
01 (&&),(||) :: Bool -> Bool -> Bool
02 False && x = False
03 True && x = x
04 False || x = x
05 True || x = True
|
Die Auswertung dieser Funktionen erfolgt durch eine Mustererkennung für
den linken Teilausdruck.
Bei der Auswertung von &&
wird also
False
als Funktionsergebnis zurückgegeben, wenn der linke Teilausdruck
zu False
ausgewertet wurde. Andernfalls wird der rechte Teilausdruck zurückgegeben.
Analoges gilt f¨r die Auswertung von ||
.
Die Folge dieser Auswertungsweise ist, dass die Funktionen für den linken Teilausdruck strikt auswerten,
für den rechten Teilausdruck aber nicht. Falls für beide Teilausdrücke eine strikte Auswertung
erwünscht ist, kann folgende Definitionsweise für &&
verwendet werden:
01 False && False = False
02 False && True = False
03 True && False = False
04 True && True = True
|
Eine so definierte Funktion ist strikt für beide Teilausdrücke. Auf ähnliche Art und Weise
läßt sich eine strikte Funktion für ||
definieren.
Funktionsbeispiele Gleichheit und Ungleichheit
Eine der wichtigsten Funktionalit&auuml;ten in Programmiersprachen ist der Test auf Gleichheit bzw. Ungleichheit.
Auch in Haskell sind diese Funktionen eingebaut und sollen hier kurz vorgestellt werden.
Sie verwenden die oben definierte Negation sowie Konjunktion und Disjunktion.
01 (==) :: Bool -> Bool -> Bool
02 x == y = (x && y) || (not x && not y)
03
04 (/=) :: Bool -> Bool -> Bool
05 x /= y = not (x == y)
|
Eine Besonderheit dieser Definition ist, dass der Test auf Ungleichheit auf den Gleichheitstest
zurückgeführt wird. Dieser Umstand wird bei den Funktionen in den folgenden Abschnitten ausgenutzt.