2
|
1 module Exercise_2 where |
|
2 import Test.QuickCheck |
|
3 import Data.List |
|
4 |
|
5 {---------------------------------------------------------------------} |
|
6 {- Aufgabe G2.1 -} |
|
7 all_sums :: [Integer] -> [Integer] -> [Integer] |
5
|
8 all_sums xs ys = [x + y | x <- xs, y <- ys] |
2
|
9 |
|
10 |
|
11 evens :: [Integer] -> [Integer] |
5
|
12 evens xs = [x | x <- xs, even x] |
2
|
13 |
|
14 |
|
15 n_lists :: [Integer] -> [[Integer]] |
5
|
16 n_lists xs = [[1..x] | x <- xs] |
2
|
17 |
|
18 |
|
19 all_even_sum_lists :: [Integer] -> [Integer] -> [[Integer]] |
5
|
20 all_even_sum_lists xs ys = [[1..(x+y)] | x <- xs, y <- ys, even (x+y)] |
2
|
21 |
|
22 |
|
23 |
|
24 {---------------------------------------------------------------------} |
|
25 {- Aufgabe G2.2 -} |
5
|
26 union'' :: [Integer] -> [Integer] -> [Integer] |
|
27 union'' xs ys = xs ++ ys |
2
|
28 |
|
29 |
|
30 intersection :: [Integer] -> [Integer] -> [Integer] |
5
|
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] |
2
|
34 |
|
35 |
|
36 diff :: [Integer] -> [Integer] -> [Integer] |
5
|
37 diff xs ys = [x | x <- xs, not(x `elem` ys)] |
2
|
38 |
|
39 |
|
40 elem' :: Integer -> [Integer] -> Bool |
5
|
41 elem' x xs = [y | y <- xs, y == x] /= [] |
2
|
42 |
|
43 |
|
44 union' :: [Integer] -> [Integer] -> [Integer] |
5
|
45 union' xs ys = diff xs ys ++ ys |
|
46 |
2
|
47 |
|
48 |
|
49 {---------------------------------------------------------------------} |
|
50 {- Aufgabe G2.3 -} |
|
51 eq_frac :: (Integer,Integer) -> (Integer,Integer) -> Bool |
5
|
52 eq_frac (a,b) (c,d) = a * d == c * b |
2
|
53 |
|
54 |
|
55 intersection_frac :: [(Integer,Integer)] -> [(Integer,Integer)] -> [(Integer,Integer)] |
5
|
56 intersection_frac xs ys = [x | x <- xs, y <- ys, x `eq_frac` y] |
2
|
57 |
|
58 |
|
59 |
|
60 {---------------------------------------------------------------------} |
|
61 {- Aufgabe G2.4 -} |
|
62 pow2_slow :: Integer -> Integer |
|
63 pow2_slow 0 = 1 |
|
64 pow2_slow n | n > 0 = 2 * pow2_slow (n - 1) |
|
65 |
|
66 |
|
67 pow2 :: Integer -> Integer |
5
|
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) |
2
|
73 |
|
74 |
|
75 |
|
76 {---------------------------------------------------------------------} |
|
77 {- Aufgabe G2.5 -} |
|
78 reachable :: [(Integer, Integer)] -> Integer -> [(Integer, Integer)] |
5
|
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] |
2
|
82 |
|
83 |
|
84 |
|
85 {---------------------------------------------------------------------} |
|
86 {- Aufgabe H2.1 -} |
|
87 factorials :: [Integer] -> [Integer] |
|
88 factorials ns = undefined |
|
89 |
5
|
90 |
2
|
91 count :: [Char] -> Char -> Integer |
|
92 count cs c = undefined |
|
93 |
|
94 |
|
95 |
|
96 {---------------------------------------------------------------------} |
|
97 {- Aufgabe H2.2 -} |
|
98 lookupTab :: [Integer] -> [(Integer, [Char])] -> [[[Char]]] |
|
99 lookupTab keys tab = undefined |
|
100 |
|
101 |
|
102 |
|
103 {---------------------------------------------------------------------} |
|
104 {- Aufgabe H2.3 -} |
|
105 wordsOfLength :: [Char] -> Integer -> [[Char]] |
|
106 wordsOfLength alphabet n = undefined |
|
107 |
|
108 |
|
109 |
|
110 {---------------------------------------------------------------------} |
|
111 {- Aufgabe H2.4 -} |
|
112 {-WETT-} |
|
113 perms :: [Char] -> [[Char]] |
|
114 perms [] = undefined |
|
115 perms xs = undefined |
|
116 {-TTEW-} |