Programmierparadigmen

Werbung
Tupel in Haskell
Programmierparadigmen
Tupel in Haskell
D. Rösner
Institut für Wissens- und Sprachverarbeitung
Fakultät für Informatik
Otto-von-Guericke Universität Magdeburg
c
Sommer 2011, 11. April 2011, 2011
D.Rösner
D. Rösner PGP 2011 . . .
1
Tupel in Haskell
Gliederung
1
Tupel in Haskell
Einleitung
Verwendung
Beispiel
D. Rösner PGP 2011 . . .
2
Tupel in Haskell
Einleitung Verwendung Beispiel
Gliederung
1
Tupel in Haskell
Einleitung
Verwendung
Beispiel
D. Rösner PGP 2011 . . .
3
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
in Tupeln wird
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
in Tupeln wird
eine feste Anzahl von Objekten aggregiert,
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
in Tupeln wird
eine feste Anzahl von Objekten aggregiert,
die aber von unterschiedlichem Typ sein können
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
in Tupeln wird
eine feste Anzahl von Objekten aggregiert,
die aber von unterschiedlichem Typ sein können
Beispiele:
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
in Tupeln wird
eine feste Anzahl von Objekten aggregiert,
die aber von unterschiedlichem Typ sein können
Beispiele:
Paare . . . (<elem1>,<elem2>)
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
in Tupeln wird
eine feste Anzahl von Objekten aggregiert,
die aber von unterschiedlichem Typ sein können
Beispiele:
Paare . . . (<elem1>,<elem2>)
Tripel (oder: 3-Tupel) . . . (<elem1>,<elem2>,<elem3>)
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
in Tupeln wird
eine feste Anzahl von Objekten aggregiert,
die aber von unterschiedlichem Typ sein können
Beispiele:
Paare . . . (<elem1>,<elem2>)
Tripel (oder: 3-Tupel) . . . (<elem1>,<elem2>,<elem3>)
n-Tupel . . . (<elem1>,<elem2>,...,<elemN>)
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
in Tupeln wird
eine feste Anzahl von Objekten aggregiert,
die aber von unterschiedlichem Typ sein können
Beispiele:
Paare . . . (<elem1>,<elem2>)
Tripel (oder: 3-Tupel) . . . (<elem1>,<elem2>,<elem3>)
n-Tupel . . . (<elem1>,<elem2>,...,<elemN>)
Unterschied:
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
in Tupeln wird
eine feste Anzahl von Objekten aggregiert,
die aber von unterschiedlichem Typ sein können
Beispiele:
Paare . . . (<elem1>,<elem2>)
Tripel (oder: 3-Tupel) . . . (<elem1>,<elem2>,<elem3>)
n-Tupel . . . (<elem1>,<elem2>,...,<elemN>)
Unterschied:
Liste aggregiert variable Anzahl von Objekten
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Aggregationstyp Tupel:
auch Tupel dienen – wie Listen – zum Zusammenfassen
von Daten zu einem Objekt
in Tupeln wird
eine feste Anzahl von Objekten aggregiert,
die aber von unterschiedlichem Typ sein können
Beispiele:
Paare . . . (<elem1>,<elem2>)
Tripel (oder: 3-Tupel) . . . (<elem1>,<elem2>,<elem3>)
n-Tupel . . . (<elem1>,<elem2>,...,<elemN>)
Unterschied:
Liste aggregiert variable Anzahl von Objekten
mit identischem Typ
D. Rösner PGP 2011 . . .
4
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Beispiel: Studenten seien dargestellt durch Paare aus
D. Rösner PGP 2011 . . .
5
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Beispiel: Studenten seien dargestellt durch Paare aus
Name (Typ String) und
D. Rösner PGP 2011 . . .
5
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Beispiel: Studenten seien dargestellt durch Paare aus
Name (Typ String) und
Matrikelnummer (Typ Int)
D. Rösner PGP 2011 . . .
5
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Beispiel: Studenten seien dargestellt durch Paare aus
Name (Typ String) und
Matrikelnummer (Typ Int)
Definition des Tupeltyps Student
type Student = (String,Int)
D. Rösner PGP 2011 . . .
5
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Beispiel: Studenten seien dargestellt durch Paare aus
Name (Typ String) und
Matrikelnummer (Typ Int)
Definition des Tupeltyps Student
type Student = (String,Int)
math. Sicht:
D. Rösner PGP 2011 . . .
5
Tupel in Haskell
Einleitung Verwendung Beispiel
Tupel in Haskell:
Beispiel: Studenten seien dargestellt durch Paare aus
Name (Typ String) und
Matrikelnummer (Typ Int)
Definition des Tupeltyps Student
type Student = (String,Int)
math. Sicht:
Tupeltyp als Teilmenge des Kreuzprodukts der
Komponententypen
D. Rösner PGP 2011 . . .
5
Tupel in Haskell
Einleitung Verwendung Beispiel
Gliederung
1
Tupel in Haskell
Einleitung
Verwendung
Beispiel
D. Rösner PGP 2011 . . .
6
Tupel in Haskell
Einleitung Verwendung Beispiel
Verwendung von Tupeln (vgl. [Tho99], 5.2)
es gibt typische Verwendungen für Tupel:
D. Rösner PGP 2011 . . .
7
Tupel in Haskell
Einleitung Verwendung Beispiel
Verwendung von Tupeln (vgl. [Tho99], 5.2)
es gibt typische Verwendungen für Tupel:
Tupel für zusammengesetzte Resultate von Funktionen
D. Rösner PGP 2011 . . .
7
Tupel in Haskell
Einleitung Verwendung Beispiel
Verwendung von Tupeln (vgl. [Tho99], 5.2)
es gibt typische Verwendungen für Tupel:
Tupel für zusammengesetzte Resultate von Funktionen
Beispiel:
minAndMax :: Int -> Int -> (Int, Int)
minAndMax x y
| x>=y
| otherwise
= (y,x)
= (x,y)
D. Rösner PGP 2011 . . .
7
Tupel in Haskell
Einleitung Verwendung Beispiel
Funktionen mit Tupeln
Funktionen mit Tupeln
D. Rösner PGP 2011 . . .
8
Tupel in Haskell
Einleitung Verwendung Beispiel
Funktionen mit Tupeln
Funktionen mit Tupeln
meist mit Pattern matching definiert
D. Rösner PGP 2011 . . .
8
Tupel in Haskell
Einleitung Verwendung Beispiel
Funktionen mit Tupeln
Funktionen mit Tupeln
meist mit Pattern matching definiert
Beispiel:
addPair :: (Int, Int) -> Int
addPair (x,y) = x+y
D. Rösner PGP 2011 . . .
8
Tupel in Haskell
Einleitung Verwendung Beispiel
Funktionen mit Tupeln
Funktionen mit Tupeln
meist mit Pattern matching definiert
Beispiel:
addPair :: (Int, Int) -> Int
addPair (x,y) = x+y
Variante mit vordefinierten Selektorfunktionen für Paare
addPair :: (Int, Int) -> Int
addPair p = fst p + snd p
D. Rösner PGP 2011 . . .
8
Tupel in Haskell
Einleitung Verwendung Beispiel
Funktionen mit Tupeln
mögliche Definition dieser Selektorfunktionen:
fst (x,y) = x
snd (x,y) = y
D. Rösner PGP 2011 . . .
9
Tupel in Haskell
Einleitung Verwendung Beispiel
Funktionen mit Tupeln
mögliche Definition dieser Selektorfunktionen:
fst (x,y) = x
snd (x,y) = y
in Prelude.hs: mit wildcards in Muster
fst
fst (x,_)
:: (a,b) -> a
= x
snd
snd (_,y)
:: (a,b) -> b
= y
D. Rösner PGP 2011 . . .
9
Tupel in Haskell
Einleitung Verwendung Beispiel
Gliederung
1
Tupel in Haskell
Einleitung
Verwendung
Beispiel
D. Rösner PGP 2011 . . .
10
Tupel in Haskell
Einleitung Verwendung Beispiel
Beispiel: effiziente Berechnung der Fibonacci-Zahlen
(vgl. [Tho99], pp. 75])
Idee: Funktion, die zwei aufeinanderfolgende Werte der
Folge als Resultat, d.h. gesucht ist
fibPair :: Int -> (Int, Int)
fibPair n = (fib n, fib (n+1))
D. Rösner PGP 2011 . . .
11
Tupel in Haskell
Einleitung Verwendung Beispiel
Beispiel: effiziente Berechnung der Fibonacci-Zahlen
(vgl. [Tho99], pp. 75])
Idee: Funktion, die zwei aufeinanderfolgende Werte der
Folge als Resultat, d.h. gesucht ist
fibPair :: Int -> (Int, Int)
fibPair n = (fib n, fib (n+1))
aus einem Paar (u,v) ergibt sich das nachfolgende Paar
als (v,u+v) über fibStep
fibStep :: (Int, Int) -> (Int, Int)
fibStep (u,v) = (v,u+v)
D. Rösner PGP 2011 . . .
11
Tupel in Haskell
Einleitung Verwendung Beispiel
Beispiel: effiziente Berechnung der Fibonacci-Zahlen
cont.
damit fibPair definierbar als
fibPair :: Int -> (Int, Int)
fibPair n
| n== 0
| otherwise
= (0,1)
= fibStep (fibPair (n-1))
D. Rösner PGP 2011 . . .
12
Tupel in Haskell
Einleitung Verwendung Beispiel
Beispiel: effiziente Berechnung der Fibonacci-Zahlen
cont.
damit fibPair definierbar als
fibPair :: Int -> (Int, Int)
fibPair n
| n== 0
| otherwise
= (0,1)
= fibStep (fibPair (n-1))
schliesslich: das erste Element des Paars ist das Ergebnis
fastFib :: Int -> Int
fastFib n = fst(fibPair n)
D. Rösner PGP 2011 . . .
12
Tupel in Haskell
Einleitung Verwendung Beispiel
Funktionen mit Tupeln
bei Definition von Funktionen auf Tupeln können auch
verschachtelte Muster verwendet werden (vgl. [Tho99],
5.2)
D. Rösner PGP 2011 . . .
13
Tupel in Haskell
Einleitung Verwendung Beispiel
Funktionen mit Tupeln
bei Definition von Funktionen auf Tupeln können auch
verschachtelte Muster verwendet werden (vgl. [Tho99],
5.2)
Beispiel:
shift :: ((Int,Int),Int) -> (Int,(Int,Int))
shift ((x,y),z) = (x,(y,z))
D. Rösner PGP 2011 . . .
13
Tupel in Haskell
Einleitung Verwendung Beispiel
Literatur: I
Graham Hutton.
Programming in Haskell.
Cambridge University Press, 2006.
ISBN 0521692695.
Simon Thompson.
Haskell - The Craft of Functional Programming.
Addison Wesley Longman Ltd., Essex, 1999.
2nd edition, ISBN 0-201-34275-8; Accompanying Web site:
http://www.cs.ukc.ac.uk/people/staff/sjt/craft2e.
D. Rösner PGP 2011 . . .
14
Herunterladen