Funktionale Programmierung mit Haskell/ Vordefinierte Datentypen
Überblick
BearbeitenDer Datentyp einer Variablen zeigt an, welchen Wert diese Variable jetzt oder später im Verlauf des Programms erhalten kann. Haskell bietet folgende Möglichkeiten:
- Int: eine ganze (negative oder positive) Zahl im "normalen" Wertebereich, z.B. die Zahl 100.
- Integer: eine (negative oder positive) ganze Zahl im "hohen" Wertebereich, z.B. die Zahl -1000000000000000000001.
- Float: Eine Gleitkommazahl mit "normaler" Genauigkeit, z.B. 714.2857
- Double: Eine Gleitkommazahl mit "hoher" Genauigkeit, z.B. 7142857.142857143
- Bool: Einen Wahrheitswert, der nur die Werte
True
oderFalse
annehmen kann. - Char: ein einzelnes alphanumerisches Zeichen, z.B. 'a'.
Im Gegensatz zu Variablen beginnen Datentypen stets mit einem Großbuchstaben.
Der kleinere Wertebereich von Int gegenüber Integer hat den Vorteil, dass eine Int-Variable weniger Speicherplatz und Rechenzeit benötigt als eine Integer-Variable. Analog ist dies bei Float und Double der Fall. Es lohnt sich also, bei der Definition einer Variable den Wertebereich vorher einzuschätzen und den Typ entsprechend zu dimensionieren.
Eigenschaften von Funktionen abfragen mit :type
BearbeitenDer Haskell-Interpreter ghci unterstützt uns mit dem Befehl :type
, die Datentypen besser zu verstehen. :type
kann auch in der Kurzform :t
angewendet werden:
Beispiele:
Prelude> :type 'a' -- welchen Typ hat das Zeichen 'a'?
'a' :: Char
Prelude> let a = 10 -- ohne Vorgabe entscheidet sich Haskell hier für den Typ Integer
Prelude> :type a
a :: Integer
Prelude> let b = 10::Int -- Es ist auch möglich, einen bestimmten Typ zu erzwingen
Prelude> :type b
b :: Int
Prelude> let a = 500/7 -- Hier entscheidet sich Haskell für den Typ Double
Prelude> a
71.42857142857143
Prelude> :t a
a :: Double
Prelude> let a=10::Double -- So kann man den Typ Double für eine Ganzzahl erzwingen
Prelude> a
10.0
Prelude> :t a
a :: Double
Prelude> :type pi -- Die Kreiskonstante pi ist eine Fließkommazahl. Sie ist im Prelude-Modul vordefiniert.
pi :: Floating a => a
Prelude> :type True -- Der Typ von True ist ein Aufzählungstyp des Datentyps Boolscher Wert
True :: Bool
Prelude> :t (2==1+1) -- Beim Verwenden des Vergleichsoperators kann der Typ nur Bool sein.
(2==1+1) :: Bool
Prelude> let a = 5.2 :: Integer -- Fehler: Eine Kommazahl kann man nicht zum Typ Integer machen
<interactive>:16:9:
No instance for (Fractional Integer) arising from the literal `5.2'
Possible fix: add an instance declaration for (Fractional Integer)
In the expression: 5.2 :: Integer
In an equation for `a': a = 5.2 :: Integer
Prelude>
Die Zeichenkombination ::
ist zu lesen als "ist vom Typ", also "ein 'a' ist vom Typ Char".
Später wird die :type
-Anweisung auch dazu verwendet, die Parameter von Funktionen besser zu verstehen.
Zeichen
BearbeitenEinzelne Zeichen werden von Hochkommas eingeschlossen. Zeichenfolgen hingegen sind Listen von Zeichen und werden in Anführungszeichen gesetzt.