annotate exercises/src/Exercise_6.hs @ 15:bef891fc07b4

week 6 tutorial
author Markus Kaiser <markus.kaiser@in.tum.de>
date Wed, 28 Nov 2012 21:18:59 +0100
parents 0d15fb5d5ade
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
1 module Exercise_6 where
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
2 import Data.Char
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
3 import Test.QuickCheck
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
4
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
5 {- Library DO NOT CHANGE -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
6 type PairList = [(Int,Int)]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
7 {- End Library -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
8
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
9
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
10 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
11 {- Aufgabe G6.1 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
12
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
13 instance Num b => Num (a -> b) where
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
14 f + g = \x -> f x + g x
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
15 f - g = \x -> f x - g x
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
16 f * g = \x -> f x * g x
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
17 negate f = \x -> negate (f x)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
18 abs f = \x -> abs (f x)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
19 signum f = \x -> signum (f x)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
20 fromInteger x = const (fromInteger x)
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
21
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
22
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
23
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
24 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
25 {- Aufgabe G6.2 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
26
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
27 foldl' :: (a -> b -> a) -> a -> [b] -> a
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
28 foldl' f z [] = z
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
29 foldl' f z ( x : xs ) = foldl' f ( f z x ) xs
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
30
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
31 foldr' :: (c -> b -> b) -> b -> [c] -> b
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
32 foldr' f z [] = z
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
33 foldr' f z ( x : xs ) = f x ( foldr' f z xs )
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
34
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
35
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
36 ffoldl = foldl' . foldl'
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
37 {-
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
38 foldl' :: (a -> b -> a) -> a -> [b] -> a
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
39
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
40 f :: (a -> b -> a)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
41
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
42 inner :: a -> [b] -> a
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
43
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
44 z :: a
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
45
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
46 xs :: [[b]]
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
47
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
48 ffoldl' :: (a -> b -> a) -> a -> [[b]] -> a
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
49 -}
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
50 ffoldl' :: (a -> b -> a) -> a -> [[b]] -> a
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
51 ffoldl' f z xs = outer inner z xs
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
52 where
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
53 inner = (foldl' f)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
54 outer = foldl'
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
55
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
56
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
57 oo = (.).(.)
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
58 oo' w = (.) ((.) w)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
59 oo'' w x = (.) ((.) w) x
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
60 oo''' w x = ((.) w) . x
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
61 oo'''' w x y = (.) w (x y)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
62 oo''''' w x y = w . (x y)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
63
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
64 oo'''''' :: (c -> d) -> (a -> b -> c) -> a -> b -> d
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
65 oo'''''' f g u v = f (g u v)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
66
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
67
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
68
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
69
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
70 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
71 {- Aufgabe G6.3 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
72
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
73 -- First vs. second parameter
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
74 a1 = (div 5)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
75 a2 = (`div` 5)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
76
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
77 -- First vs. second parameter
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
78 b1 = (+7)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
79 b2 = (7+)
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
80
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
81 c1 = map (:[]) -- [[x] | x <- xs]
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
82 c2 = map ([]:) -- Prepend [] to every list element
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
83
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
84 o f g x = f (g x)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
85 flip' f x y = f y x
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
86 -- Both ids, d2 is more general
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
87 d1 = flip . flip
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
88 d2 = id
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
89
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
90 e1 x y z = [x, y, z] -- z element
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
91 e2 x y z = x : y : z -- z list
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
92
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
93
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
94
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
95 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
96 {- Aufgabe G6.4 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
97
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
98 {-
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
99 Lemma reverse = foldl (\xs x -> x : xs) []
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
100 Proof by extensionality
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
101 To show:
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
102 *: reverse xs = foldl (\xs x -> x : xs) [] xs for all xs
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
103 Too specialized for an induction!
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
104
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
105 Generalization
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
106 To show:
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
107 GEN: reverse xs ++ ys = foldl (\xs x -> x : xs) ys xs for all xs, ys
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
108 Proof by structural induction on xs
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
109
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
110 Base case:
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
111 To show: reverse [] ++ ys = foldl (\xs x -> x : xs) ys [] for all ys
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
112 reverse [] ++ ys
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
113 == [] ++ ys (by reverse_Nil)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
114 == ys (by append_Nil)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
115 foldl (\xs x -> x : xs) ys []
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
116 == ys (by foldl_Nil)
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
117
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
118 Induction step:
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
119 IH: reverse zs ++ ys = foldl (\xs x -> x : xs) ys zs for all ys
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
120 To show: reverse (z : zs) ++ ys = foldl (\xs x -> x : xs) ys (z : zs) for all ys
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
121 reverse (z : zs) ++ ys
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
122 == (reverse zs ++ [z]) ++ ys (by reverse_Cons)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
123 == reverse zs ++ ([z] ++ ys) (by append_assoc)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
124 == reverse zs ++ z : ([] ++ ys) (by append_Cons)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
125 == reverse zs ++ z : ys (by append_Nil)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
126 == foldl (\xs x -> x : xs) (z : ys) zs (by IH with z : ys instead of ys)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
127 foldl (\xs x -> x : xs) ys (z : zs)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
128 == foldl (\xs x -> x : xs) ((\xs x -> x : xs) ys z) zs (by foldl_Cons)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
129 == foldl (\xs x -> x : xs) ((\x -> x : ys) z) zs (by eval of lambda)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
130 == foldl (\xs x -> x : xs) (z : ys) zs (by eval of lambda)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
131
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
132 QED for GEN
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
133
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
134 To prove * we instantiate GEN with [] for ys and apply append_Nil2.
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
135
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
136 QED
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
137
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
138 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
139
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
140
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
141
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
142 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
143 {- Aufgabe G6.5 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
144
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
145 f1 xs = map (+ 1) xs
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
146 f1' = map (+1)
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
147
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
148 f2 xs = map (2 *) (map (+ 1) xs)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
149 f2' = map (\z -> 2*(z+1))
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
150 f2'' = map ((*2) . (+1))
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
151 f2''' = map (*2) . map(+1)
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
152
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
153 f3 xs = f (g xs)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
154 where
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
155 g = map (+ 1)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
156 f = filter (> 1)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
157
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
158 f3' = filter (> 1) . map (+ 1)
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
159
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
160 f4 f g x = f (g x)
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
161 f4' f g x = (f . g) x
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
162 f4'' f g = f . g
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
163 f4''' = (.)
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
164
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
165 f5 f g x y = f ((g x) y)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
166 f5' f g x = f . (g x)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
167 --
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
168 f5'' = (.).(.)
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
169
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
170 f6 f g x y z = f (g x y z)
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
171 f6' f g x y = f . (g x y)
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
172 --
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
173 f6'' = (.).(.).(.)
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
174
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
175 f7 f g h x = g (h (f x))
15
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
176 f7' f g h x = g . (h (f x))
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
177 f7'' f g h = g . h . f
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
178 --
bef891fc07b4 week 6 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 14
diff changeset
179 f7''' = flip ((.).(.)) . flip (.)
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
180
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
181
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
182 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
183 {- Aufgabe H6.1 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
184
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
185 wellformed :: PairList -> Bool
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
186 wellformed = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
187
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
188
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
189 empty :: PairList
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
190 empty = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
191
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
192
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
193 member :: Int -> PairList -> Bool
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
194 member = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
195
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
196
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
197 insert :: Int -> PairList -> PairList
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
198 insert = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
199
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
200
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
201 union :: PairList -> PairList -> PairList
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
202 union = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
203
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
204
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
205 delete :: Int -> PairList -> PairList
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
206 delete = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
207
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
208
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
209
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
210 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
211 {- Aufgabe H6.2 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
212
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
213 {-WETT-}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
214 anonymize :: String -> String
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
215 anonymize = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
216 {-TTEW-}