# HG changeset patch # User Markus Kaiser # Date 1351446456 -3600 # Node ID f1a337c9f260a4d01ca63e18a51a061ed895925a # Parent e02058a1afbd8ebbd0e681453bb4a94ce49a9a9d week 2 tutorial diff -r e02058a1afbd -r f1a337c9f260 exercises/src/Exercise_2.hs --- a/exercises/src/Exercise_2.hs Sun Oct 28 15:31:36 2012 +0100 +++ b/exercises/src/Exercise_2.hs Sun Oct 28 18:47:36 2012 +0100 @@ -5,52 +5,55 @@ {---------------------------------------------------------------------} {- Aufgabe G2.1 -} all_sums :: [Integer] -> [Integer] -> [Integer] -all_sums xs ys = undefined +all_sums xs ys = [x + y | x <- xs, y <- ys] evens :: [Integer] -> [Integer] -evens xs = undefined +evens xs = [x | x <- xs, even x] n_lists :: [Integer] -> [[Integer]] -n_lists xs = undefined +n_lists xs = [[1..x] | x <- xs] all_even_sum_lists :: [Integer] -> [Integer] -> [[Integer]] -all_even_sum_lists xs ys = undefined +all_even_sum_lists xs ys = [[1..(x+y)] | x <- xs, y <- ys, even (x+y)] {---------------------------------------------------------------------} {- Aufgabe G2.2 -} -union :: [Integer] -> [Integer] -> [Integer] -union xs ys = undefined +union'' :: [Integer] -> [Integer] -> [Integer] +union'' xs ys = xs ++ ys intersection :: [Integer] -> [Integer] -> [Integer] -intersection xs ys = undefined +intersection xs ys = [x | x <- xs, x `elem` ys] +-- Alternativ ohne elem: +-- intersection xs ys = [x | x <- xs, y <- ys, x == y] diff :: [Integer] -> [Integer] -> [Integer] -diff xs ys = undefined +diff xs ys = [x | x <- xs, not(x `elem` ys)] elem' :: Integer -> [Integer] -> Bool -elem' x xs = undefined +elem' x xs = [y | y <- xs, y == x] /= [] union' :: [Integer] -> [Integer] -> [Integer] -union' xs ys = undefined +union' xs ys = diff xs ys ++ ys + {---------------------------------------------------------------------} {- Aufgabe G2.3 -} eq_frac :: (Integer,Integer) -> (Integer,Integer) -> Bool -eq_frac (a,b) (c,d) = undefined +eq_frac (a,b) (c,d) = a * d == c * b intersection_frac :: [(Integer,Integer)] -> [(Integer,Integer)] -> [(Integer,Integer)] -intersection_frac xs ys = undefined +intersection_frac xs ys = [x | x <- xs, y <- ys, x `eq_frac` y] @@ -62,14 +65,20 @@ pow2 :: Integer -> Integer -pow2 n = undefined +pow2 0 = 1 +pow2 n + | n < 0 = error "Postive n only" + | even n = pow2 (n `div` 2) ^ 2 + | otherwise = 2 * pow2 (n - 1) {---------------------------------------------------------------------} {- Aufgabe G2.5 -} reachable :: [(Integer, Integer)] -> Integer -> [(Integer, Integer)] -reachable graph 0 = undefined +reachable graph 0 = nub $ concat [[(u, u), (v, v)] | (u, v) <- graph] +reachable graph 1 = graph +reachable graph n | n > 0 = [(u, x) | (u, v) <- graph, (w, x) <- reachable graph (n-1), v == w] @@ -78,6 +87,7 @@ factorials :: [Integer] -> [Integer] factorials ns = undefined + count :: [Char] -> Char -> Integer count cs c = undefined