Programmieren in Haskell

Werbung
Programmieren in Haskell
Programmieren in Haskell
1
Was wir heute machen
• Kurze Vorstellung
• Administrative Hinweise
• Haskell-Teaser
• Aufgabe für diese Woche
Programmieren in Haskell
2
Dr. Peter Steffen
Raum: M3-124
Tel.: 0521/106-2906
Email: [email protected]
Programmieren in Haskell
3
Hinweise zu den Vorlesungen
Hinweise zu den Vorlesungen “Algorithmen & Datenstrukturen I” und
“Programmieren in Haskell” findet Ihr hier:
http://www.techfak.uni-bielefeld.de/ags/pi/lehre/AuDIWS07/
→ Folien als pdf
→ Übungsblätter
→ Hinweise zur Haskell-Installation
Programmieren in Haskell
4
Hinweise zu den Übungen
Für die Vorlesungen „Algorithmen & Datenstrukturen I” und „Programmieren in
Haskell” gibt es Übungen.
Die Aufteilung der Übungsgruppen wird in der morgigen Algorithmen und
Datenstrukturen-Vorlesung organisiert.
Dazu ist es notwendig, dass alle im eKVV die Veranstaltung „Programmierübungen
in Haskell” in ihren persönlichen Stundenplan eintragen.
Programmieren in Haskell
5
Hugs-Download
Für Windows:
http://www.haskell.org/hugs/
Programmieren in Haskell
6
Ein bißchen Haskell
answer :: Int
answer = 42
Programmieren in Haskell
7
Ein bißchen Haskell
answer :: Int
answer = 42
yes :: Bool
yes = True
Programmieren in Haskell
7
Ein bißchen Haskell
answer :: Int
answer = 42
yes :: Bool
yes = True
greater :: Bool
greater = (answer > 71)
Programmieren in Haskell
7
Main> answer
42
Main> yes
True
Main> greater
False
Programmieren in Haskell
8
square :: Int -> Int
square x = x*x
Programmieren in Haskell
9
square :: Int -> Int
square x = x*x
allEqual :: Int -> Int -> Int -> Bool
allEqual n m p = (n==m) && (m==p)
Programmieren in Haskell
9
square :: Int -> Int
square x = x*x
allEqual :: Int -> Int -> Int -> Bool
allEqual n m p = (n==m) && (m==p)
maxi :: Int -> Int -> Int
maxi n m
| n >= m
= n
| otherwise = m
Programmieren in Haskell
9
Main> square 5
25
Main> allEqual 1 1 2
False
Main> maxi 23 117
117
Programmieren in Haskell
10
Ein ziemlich ausgefeiltes Beispiel, das Ihr jetzt noch nicht
verstehen müsst
qsort :: (Ord a) => [a] -> [a]
qsort []
= []
qsort (a:as) = qsort [b | b <- as, b < a]
++ [a]
++ qsort [ b | b <- as, b >= a]
Programmieren in Haskell
11
Ein ziemlich ausgefeiltes Beispiel, das Ihr jetzt noch nicht
verstehen müsst
qsort :: (Ord a) => [a] -> [a]
qsort []
= []
qsort (a:as) = qsort [b | b <- as, b < a]
++ [a]
++ qsort [ b | b <- as, b >= a]
Main> qsort [1,4,2,2,4]
[1,2,2,4,4]
Programmieren in Haskell
11
Ein ziemlich ausgefeiltes Beispiel, das Ihr jetzt noch nicht
verstehen müsst
qsort :: (Ord a) => [a] -> [a]
qsort []
= []
qsort (a:as) = qsort [b | b <- as, b < a]
++ [a]
++ qsort [ b | b <- as, b >= a]
Main> qsort [1,4,2,2,4]
[1,2,2,4,4]
Main> (1:4:2:2:4:[])
[1,4,2,2,4]
Programmieren in Haskell
11
Listenkonkatenation
Hugs.Base> [1,4,2] ++ [2,4]
[1,4,2,2,4]
Programmieren in Haskell
12
Listenkonkatenation
Hugs.Base> [1,4,2] ++ [2,4]
[1,4,2,2,4]
Zeichenketten (Strings) sind auch Listen:
Hugs.Base> "Haskell " ++ "ist " ++ "toll!"
"Haskell ist toll!"
Programmieren in Haskell
12
Listenkonkatenation
Hugs.Base> [1,4,2] ++ [2,4]
[1,4,2,2,4]
Zeichenketten (Strings) sind auch Listen:
Hugs.Base> "Haskell " ++ "ist " ++ "toll!"
"Haskell ist toll!"
Main> qsort "Haskell ist toll!"
" !Haeikllllosstt"
Programmieren in Haskell
12
Coole Sachen mit Listen
Die ersten 4 Elemente:
Main> take 4 "Jens Stoye"
"Jens"
Programmieren in Haskell
13
Coole Sachen mit Listen
Die ersten 4 Elemente:
Main> take 4 "Jens Stoye"
"Jens"
Unendliche (!) Listen:
Main> [1..]
[1,2,3,4,5,6,7,8,9,10,11,
Programmieren in Haskell
13
Coole Sachen mit Listen
Die ersten 4 Elemente:
Main> take 4 "Jens Stoye"
"Jens"
Unendliche (!) Listen:
Main> [1..]
[1,2,3,4,5,6,7,8,9,10,11,
Die ersten 4 natürlichen Zahlen (!!):
Main> take 4 [1..]
[1,2,3,4]
Programmieren in Haskell
13
Eure Aufgabe für diese Woche
1. Hugs installieren oder mit Techfak-Installation vertraut machen
2. Beispiele ausprobieren
Programmieren in Haskell
14
Herunterladen