Programmieren in Haskell Programmieren in Haskell 1 Was wir heute machen • Kurze Vorstellung • Eine Regel • Administrative Hinweise • Haskell-Teaser • Aufgabe für’s Wochenende Programmieren in Haskell 2 Dr. Marc Rehmsmeier Raum: M3-120 Tel.: 0521/106-2905 Email: [email protected] Programmieren in Haskell 3 Eine Regel Ruhe. Programmieren in Haskell 4 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/AuDIWS06/ → Folien als pdf → Übungsblätter → Hinweise zur Haskell-Installation Programmieren in Haskell 5 Hugs-Download Für Windows: http://cvs.haskell.org/Hugs/downloads/2006-09/WinHugs-Sep2006.exe Programmieren in Haskell 6 :? Ein bißchen Haskell answer :: Int answer = 42 Programmieren in Haskell 8 Ein bißchen Haskell answer :: Int answer = 42 yes :: Bool yes = True Programmieren in Haskell 8 Ein bißchen Haskell answer :: Int answer = 42 yes :: Bool yes = True greater :: Bool greater = (answer > 71) Programmieren in Haskell 8 Main> answer 42 Main> yes True Main> greater False Programmieren in Haskell 9 square :: Int -> Int square x = x*x Programmieren in Haskell 10 square :: Int -> Int square x = x*x allEqual :: Int -> Int -> Int -> Bool allEqual n m p = (n==m) && (m==p) Programmieren in Haskell 10 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 10 Main> square 5 25 Main> allEqual 1 1 2 False Main> maxi 23 117 117 Programmieren in Haskell 11 Ein ziemlich ausgefeiltes Beispiel, das Ihr jetzt noch nicht verstehen müßt 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 12 Ein ziemlich ausgefeiltes Beispiel, das Ihr jetzt noch nicht verstehen müßt 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 12 Ein ziemlich ausgefeiltes Beispiel, das Ihr jetzt noch nicht verstehen müßt 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 12 Listenkonkatenation Hugs.Base> [1,4,2] ++ [2,4] [1,4,2,2,4] Programmieren in Haskell 13 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 13 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 13 Coole Sachen mit Listen Die ersten 4 Elemente: Main> take 4 "Robert Giegerich" "Robe" Programmieren in Haskell 14 Coole Sachen mit Listen Die ersten 4 Elemente: Main> take 4 "Robert Giegerich" "Robe" Unendliche (!) Listen: Main> [1..] [1,2,3,4,5,6,7,8,9,10,11, Programmieren in Haskell 14 Coole Sachen mit Listen Die ersten 4 Elemente: Main> take 4 "Robert Giegerich" "Robe" 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 14 Eure Aufgabe für’s Wochenende 1. Hugs installieren oder mit Techfak-Installation vertraut machen 2. Beispiele ausprobieren Programmieren in Haskell 15