Funktionales Programmieren Standardtypen - FB3

Werbung
Ü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
Herunterladen