You are on page 1of 24

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: psteffen@techfak.uni-bielefeld.de

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

You might also like