Mercurial > 12ws.info2
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 |