# HG changeset patch # User Markus Kaiser # Date 1359580078 -3600 # Node ID f62e3ed2c90d642055ea0312c5a0c75a40df6008 # Parent 71b56f8b30697ca6a322114bd53fc5407dcb99ec week 13 tutorial diff -r 71b56f8b3069 -r f62e3ed2c90d exercises/src/Exercise_13.hs --- a/exercises/src/Exercise_13.hs Wed Jan 23 23:22:07 2013 +0100 +++ b/exercises/src/Exercise_13.hs Wed Jan 30 22:07:58 2013 +0100 @@ -4,22 +4,89 @@ import System.Random (randomRIO) import Test.QuickCheck -{---------------------------------------------------------------------} -{- Aufgabe G13.1 -} + +helloWorld :: IO () +helloWorld = putStrLn "Hello, World!" + -nRandomR :: (Int, Int) -> Int -> IO [Int] -nRandomR lowhigh = undefined +greeter :: IO () +greeter = do + putStr "Tell me your name: " + name <- getLine + if name == "bye" + then putStrLn "Goodbye!" + else do + putStrLn $ "Ah, hi there, " ++ name ++ "!" + greeter +randomisator :: IO Int +randomisator = do + let bs = (1, 10) + a <- randomRIO bs + b <- randomRIO bs + c <- randomRIO bs + return $ a + b + c + {---------------------------------------------------------------------} {- Aufgabe G13.1 -} +nRandomR :: (Int, Int) -> Int -> IO [Int] +nRandomR lowhigh n = randHelp [] n + where + randHelp :: [Int] -> Int -> IO [Int] + randHelp xs 0 = return xs + randHelp xs n = do + x <- randomRIO lowhigh + if x `elem` xs + then randHelp xs n + else randHelp (x : xs) (n-1) + + +nRandomR' :: (Int, Int) -> Int -> IO [Int] +nRandomR' _ 0 = return [] +nRandomR' lowhigh n = do + i <- randomRIO lowhigh + is <- nRandomR' lowhigh (n-1) + if i `elem` is + then nRandomR' lowhigh n + else return (i:is) + + + +{---------------------------------------------------------------------} +{- Aufgabe G13.2 -} + getLineInt :: IO Int -getLineInt = undefined +getLineInt = do + putStr "Enter a Number: " + line <- getLine + if (not . null) line && all isDigit line + then return $ read line + else do + putStrLn "Not a nonnegative number!" + getLineInt + guessNum :: IO Int -guessNum = undefined +guessNum = do + rnd <- randomRIO (0, 100) + putStrLn "Guess my number!" + doGuessNum rnd 1 + where + doGuessNum :: Int -> Int -> IO Int + doGuessNum rnd n = do + x <- getLineInt + if x < rnd then do + putStrLn "Blubberlutsch." + doGuessNum rnd (n+1) + else if x > rnd then do + putStrLn "Brawarkl" + doGuessNum rnd (n+1) + else do + putStrLn "(...)" + return n