comparison exercises/src/Exercise_2.hs @ 5:f1a337c9f260

week 2 tutorial
author Markus Kaiser <markus.kaiser@in.tum.de>
date Sun, 28 Oct 2012 18:47:36 +0100
parents 243f6cfa029a
children 50f08a46ea10
comparison
equal deleted inserted replaced
4:e02058a1afbd 5:f1a337c9f260
3 import Data.List 3 import Data.List
4 4
5 {---------------------------------------------------------------------} 5 {---------------------------------------------------------------------}
6 {- Aufgabe G2.1 -} 6 {- Aufgabe G2.1 -}
7 all_sums :: [Integer] -> [Integer] -> [Integer] 7 all_sums :: [Integer] -> [Integer] -> [Integer]
8 all_sums xs ys = undefined 8 all_sums xs ys = [x + y | x <- xs, y <- ys]
9 9
10 10
11 evens :: [Integer] -> [Integer] 11 evens :: [Integer] -> [Integer]
12 evens xs = undefined 12 evens xs = [x | x <- xs, even x]
13 13
14 14
15 n_lists :: [Integer] -> [[Integer]] 15 n_lists :: [Integer] -> [[Integer]]
16 n_lists xs = undefined 16 n_lists xs = [[1..x] | x <- xs]
17 17
18 18
19 all_even_sum_lists :: [Integer] -> [Integer] -> [[Integer]] 19 all_even_sum_lists :: [Integer] -> [Integer] -> [[Integer]]
20 all_even_sum_lists xs ys = undefined 20 all_even_sum_lists xs ys = [[1..(x+y)] | x <- xs, y <- ys, even (x+y)]
21 21
22 22
23 23
24 {---------------------------------------------------------------------} 24 {---------------------------------------------------------------------}
25 {- Aufgabe G2.2 -} 25 {- Aufgabe G2.2 -}
26 union :: [Integer] -> [Integer] -> [Integer] 26 union'' :: [Integer] -> [Integer] -> [Integer]
27 union xs ys = undefined 27 union'' xs ys = xs ++ ys
28 28
29 29
30 intersection :: [Integer] -> [Integer] -> [Integer] 30 intersection :: [Integer] -> [Integer] -> [Integer]
31 intersection xs ys = undefined 31 intersection xs ys = [x | x <- xs, x `elem` ys]
32 -- Alternativ ohne elem:
33 -- intersection xs ys = [x | x <- xs, y <- ys, x == y]
32 34
33 35
34 diff :: [Integer] -> [Integer] -> [Integer] 36 diff :: [Integer] -> [Integer] -> [Integer]
35 diff xs ys = undefined 37 diff xs ys = [x | x <- xs, not(x `elem` ys)]
36 38
37 39
38 elem' :: Integer -> [Integer] -> Bool 40 elem' :: Integer -> [Integer] -> Bool
39 elem' x xs = undefined 41 elem' x xs = [y | y <- xs, y == x] /= []
40 42
41 43
42 union' :: [Integer] -> [Integer] -> [Integer] 44 union' :: [Integer] -> [Integer] -> [Integer]
43 union' xs ys = undefined 45 union' xs ys = diff xs ys ++ ys
46
44 47
45 48
46 {---------------------------------------------------------------------} 49 {---------------------------------------------------------------------}
47 {- Aufgabe G2.3 -} 50 {- Aufgabe G2.3 -}
48 eq_frac :: (Integer,Integer) -> (Integer,Integer) -> Bool 51 eq_frac :: (Integer,Integer) -> (Integer,Integer) -> Bool
49 eq_frac (a,b) (c,d) = undefined 52 eq_frac (a,b) (c,d) = a * d == c * b
50 53
51 54
52 intersection_frac :: [(Integer,Integer)] -> [(Integer,Integer)] -> [(Integer,Integer)] 55 intersection_frac :: [(Integer,Integer)] -> [(Integer,Integer)] -> [(Integer,Integer)]
53 intersection_frac xs ys = undefined 56 intersection_frac xs ys = [x | x <- xs, y <- ys, x `eq_frac` y]
54 57
55 58
56 59
57 {---------------------------------------------------------------------} 60 {---------------------------------------------------------------------}
58 {- Aufgabe G2.4 -} 61 {- Aufgabe G2.4 -}
60 pow2_slow 0 = 1 63 pow2_slow 0 = 1
61 pow2_slow n | n > 0 = 2 * pow2_slow (n - 1) 64 pow2_slow n | n > 0 = 2 * pow2_slow (n - 1)
62 65
63 66
64 pow2 :: Integer -> Integer 67 pow2 :: Integer -> Integer
65 pow2 n = undefined 68 pow2 0 = 1
69 pow2 n
70 | n < 0 = error "Postive n only"
71 | even n = pow2 (n `div` 2) ^ 2
72 | otherwise = 2 * pow2 (n - 1)
66 73
67 74
68 75
69 {---------------------------------------------------------------------} 76 {---------------------------------------------------------------------}
70 {- Aufgabe G2.5 -} 77 {- Aufgabe G2.5 -}
71 reachable :: [(Integer, Integer)] -> Integer -> [(Integer, Integer)] 78 reachable :: [(Integer, Integer)] -> Integer -> [(Integer, Integer)]
72 reachable graph 0 = undefined 79 reachable graph 0 = nub $ concat [[(u, u), (v, v)] | (u, v) <- graph]
80 reachable graph 1 = graph
81 reachable graph n | n > 0 = [(u, x) | (u, v) <- graph, (w, x) <- reachable graph (n-1), v == w]
73 82
74 83
75 84
76 {---------------------------------------------------------------------} 85 {---------------------------------------------------------------------}
77 {- Aufgabe H2.1 -} 86 {- Aufgabe H2.1 -}
78 factorials :: [Integer] -> [Integer] 87 factorials :: [Integer] -> [Integer]
79 factorials ns = undefined 88 factorials ns = undefined
89
80 90
81 count :: [Char] -> Char -> Integer 91 count :: [Char] -> Char -> Integer
82 count cs c = undefined 92 count cs c = undefined
83 93
84 94