changeset 5:f1a337c9f260

week 2 tutorial
author Markus Kaiser <markus.kaiser@in.tum.de>
date Sun, 28 Oct 2012 18:47:36 +0100
parents e02058a1afbd
children ae83fe6ebcd3
files exercises/src/Exercise_2.hs
diffstat 1 files changed, 24 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- 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