Datentyp Boolean


... [ Seminar "Einführung in die funktionale Programmiersprache Haskell" ] ... [ Inhaltsverzeichnis ] ... [ zurück ] ... [ weiter ] ...

Ü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.


[ nach oben ]

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.


[ nach oben ]

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.


[ nach oben ]

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.


... [ Seminar "Einführung in die funktionale Programmiersprache Haskell" ] ... [ Inhaltsverzeichnis ] ... [ zurück ] ... [ weiter ] ... [ nach oben ] ...