Funktionale Programmierung mit Haskell/ Vordefinierte Datentypen

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Überblick[Bearbeiten]

Der 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 oder False 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[Bearbeiten]

Der 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:

Dialog in Beispiele für :type in ghci
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>
Hinweis: die Kommentare, die mit -- beginnen, sind hier nur zur Erläuterung angefügt. In einem echten ghci-Dialog dürfen sie nicht verwendet werden, da sie das Ergebnis verfälschen.


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[Bearbeiten]

Einzelne Zeichen werden von Hochkommas eingeschlossen. Zeichenfolgen hingegen sind Listen von Zeichen und werden in Anführungszeichen gesetzt.