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