Überleitung Einfache Typen Listen/Tupel Überleitung Einfache Typen Listen/Tupel Letztes Mal Standardtypen Funktionales Programmieren ( 5. November 2007) 1 Überleitung Letztes Mal 2 Einfache Standardtypen in Haskell 3 Zusammengesetzte Standardtypen Standardtypen Berthold Hoffmann Studiengang Informatik Universität Bremen Wintersemester 2007/2008 (Vorlesung am 5. November 2007) Berthold Hoffmann Überleitung Einfache Typen Listen/Tupel Berthold Hoffmann Funktionales Programmieren Überleitung Einfache Typen Listen/Tupel Letztes Mal Wissen Sie noch? Wertemengen Typklassen Bool Standardtypen Funktionales Programmieren in der Nussschale Datentypen sind algebraisch und parametrisiert Werte sind Konstruktor-Bäume bzw. -Graphen Funktionen sind polymorph Gleichungen mit Fallunterscheidung und Rekursion data Tree a = Leaf a | Branch (Tree a) (Tree a) height :: (Tree a) -> Integer height (Leaf n) = 1 height (Branch l r) = max (height l) (height r) Berthold Hoffmann Überleitung Einfache Typen Listen/Tupel Berthold Hoffmann Einfache Standardtypen in Haskell Wertemengen der einfachen Standardtypen Typklassen für vordefinierte einfache Typen Wahrheitswerte 3 Zusammengesetzte Standardtypen Funktionales Programmieren Wertemengen Typklassen Bool Typklassen Literale True und False ’a’, ’6’, ’;’, ’\n’, . . . 0, 1, . . . , 42, . . . 0.0, 2E10 . . . 3.1415, 1.2E-12 . . . 1%2, -7%5000000 Klassifikation von Typ-Eigenschaften typische Operationen und ihre Abhängigkeiten Typen können Klassen instantiieren Ähnlich wie abstrakte Klassen class Eq a where (==), (/=) :: a -> a -> Bool x /= y = not (x == y) -- Minimale Definition: x == y = not (x /= y) -- (==) or (/=) Berthold Hoffmann Funktionales Programmieren Wertemengen Typklassen Bool Überleitung Einfache Typen Listen/Tupel Show Read Ord Num Real Integral Funktionales Programmieren Wertemengen Typklassen Bool Vordefinierte Typlassen Eq Fractional RealFrac Floating RealFloat Bool Char Int Integer Rational Float Double Berthold Hoffmann 2 Berthold Hoffmann Standardtypen und Typklassen Bounded Enum Überleitung Überleitung Einfache Typen Listen/Tupel Wertemengen Typklassen Bool Wertemenge Wahrheitswerte darstellbare Zeichen ganze Zahlen ganze Zahlen Z Fließkommazahlen (32 bzw. 64 Bit) rationale Zahlen Q Überleitung Einfache Typen Listen/Tupel ( 5. November 2007) 1 Funktionales Programmieren einfache Standardtypen Typ Bool Char Int Integer Float Double Rational Funktionales Programmieren Funktionales Programmieren Klasse Show Read Eq Ord Num Real Fractional Integral RealFrac Floating RealFloat Enum Bounded Eigenschaft druckbar lesbar vergleichbar vollständig geordnet numerisch – teilbar ganzzahlig – transzendent Gleitkomma aufzählbar beschränkt Berthold Hoffmann wichtige Operationen show read == /= < <= >= > Zahlen + - * toRational gebrochene Zahlen / div mod truncate round pi, exp log . . . exponent succ pred toInt toEnum minBound maxBound Funktionales Programmieren Überleitung Einfache Typen Listen/Tupel Wertemengen Typklassen Bool gebundene Polymorphie Universelle Polymorphie: height :: Tree a -> Int height ist für alle Bäume definiert. Gebundene Polymorphie: show :: Show a => a -> String “show ist für alle Instanzen von Show definiert.” Ein weiteres Beispiel: (+) :: Num a => a -> a -> a Gilt auch für Zahlen: 42 :: Num a => a 0.341 :: Fractional a => a Berthold Hoffmann Überleitung Einfache Typen Listen/Tupel Berthold Hoffmann Überleitung Einfache Typen Listen/Tupel Wertemengen Typklassen Bool Gleichheit == entspricht der logische Äquivalenz ⇔. ˙ Ungleichheit /= entspricht exklusivem Oder ∨. Das Prädikat >= entspricht der logische Implikation ⇒. Berthold Hoffmann Wertemengen Typklassen Bool data Bool = False | True deriving (Eq, Ord, Enum, Bounded, Read, Show) not :: Bool-> Bool -- Negation not True = False not False = True (&&), (||) :: Bool-> Bool-> Bool True && b = b -- Konjunktion False && = False True || = True -- Disjunktion False || b = b Funktionales Programmieren Geerbte Operationen von Bool Überleitung Einfache Typen Listen/Tupel Überleitung Einfache Typen Listen/Tupel Der Datentyp Bool Tupel Listen Standardtypen ( 5. November 2007) 1 Überleitung 2 Einfache Standardtypen in Haskell 3 Zusammengesetzte Standardtypen Tupel Listen Berthold Hoffmann Funktionales Programmieren Überleitung Einfache Typen Listen/Tupel Tupel Listen Tupel Funktionales Programmieren Funktionales Programmieren Tupel Listen Listen Feste Anzahl von Komponenten im Allgemeinen verschiedene Komponententypen data (a,b) = (a,b) deriving (Eq, Ord, Bounded, Show, Read) data (a,b,c) = (a,b,c) deriving (Eq, Ord, Bounded, Show, Read) ... Berthold Hoffmann Überleitung Einfache Typen Listen/Tupel data [a] = [] | a : [a] deriving (Eq, Ord, Show, Read) Berthold Hoffmann Funktionales Programmieren Tupel Listen Zusammenfassung Überleitung Einfache Typen Listen/Tupel Funktionales Programmieren Tupel Listen Nächstes Mal Listen, Listen, Listen . . . vordefinierte Listenfunktionen Listenumschreibungen Formen der Rekursion einfache Standardtypen vordefinierte Typklassen Tupel und Listen Berthold Hoffmann Variable Anzahl von Komponenten immmer gleicher Komponententyp Funktionales Programmieren Berthold Hoffmann Funktionales Programmieren