Mercurial > 12ws.info2
comparison exercises/src/Exercise_9.hs @ 21:3fea6fff7265
week 9
author | Markus Kaiser <markus.kaiser@in.tum.de> |
---|---|
date | Wed, 12 Dec 2012 20:32:09 +0100 |
parents | |
children | 498aea38199b |
comparison
equal
deleted
inserted
replaced
20:6d43207984ec | 21:3fea6fff7265 |
---|---|
1 module Exercise_9 where | |
2 import Test.QuickCheck | |
3 import Control.Monad | |
4 | |
5 {- Library DO NOT CHANGE -} | |
6 data Tree a = Empty | Node a (Tree a) (Tree a) | |
7 deriving (Eq, Show) | |
8 | |
9 data Tree23 a = Leaf a | |
10 | Branch2 (Tree23 a) a (Tree23 a) | |
11 | Branch3 (Tree23 a) a (Tree23 a) a (Tree23 a) | |
12 deriving Show | |
13 | |
14 mirror :: Tree a -> Tree a | |
15 mirror Empty = Empty | |
16 mirror (Node x l r) = Node x (mirror r) (mirror l) | |
17 | |
18 flat :: Tree a -> [a] | |
19 flat Empty = [] | |
20 flat (Node x l r) = flat l ++ [x] ++ flat r | |
21 | |
22 -- allow QuickCheck to generate arbitrary values of type Tree | |
23 instance Arbitrary a => Arbitrary (Tree a) where | |
24 arbitrary = sized tree | |
25 where | |
26 tree 0 = return Empty | |
27 tree n | n > 0 = oneof [return Empty, | |
28 liftM3 Node arbitrary (tree (n `div` 2)) (tree (n `div` 2))] | |
29 shrink Empty = [] | |
30 shrink (Node x l r) = l : r : map (\l' -> Node x l' r) (shrink l) | |
31 ++ map (\r' -> Node x l r') (shrink r) | |
32 | |
33 -- examples for G9.2 | |
34 balancedTrees = | |
35 [ Empty | |
36 , Node 0 Empty Empty | |
37 , Node 0 (Node 1 Empty Empty) Empty | |
38 , Node 4 (Node 2 Empty (Node 5 Empty Empty)) (Node 0 Empty Empty) | |
39 , Node 1 (Node 0 Empty (Node 3 Empty Empty)) | |
40 (Node 0 Empty (Node 3 Empty Empty)) | |
41 ] | |
42 | |
43 unbalancedTrees = | |
44 [ Node 3 (Node 2 Empty (Node 1 Empty Empty)) Empty | |
45 , Node 4 (Node 3 (Node 2 (Node 1 Empty Empty) Empty) Empty) | |
46 (Node 3 Empty (Node 2 Empty (Node 1 Empty Empty))) | |
47 , Node 9 (Node 8 (Node 7 Empty Empty ) Empty) | |
48 (Node 1 (Node 0 Empty (Node 3 Empty Empty)) | |
49 (Node 0 Empty (Node 3 Empty Empty))) | |
50 ] | |
51 {- End Library -} | |
52 | |
53 | |
54 {---------------------------------------------------------------------} | |
55 {- Aufgabe G9.1 -} | |
56 | |
57 {- | |
58 Lemma mirror (mirror t) = t | |
59 Proof by structural induction on t | |
60 | |
61 Base case: | |
62 To show: | |
63 | |
64 Induction step: | |
65 IH1: | |
66 IH2: | |
67 To show: | |
68 | |
69 QED? | |
70 -} | |
71 | |
72 | |
73 | |
74 {---------------------------------------------------------------------} | |
75 {- Aufgabe G9.2 -} | |
76 | |
77 balanced :: Tree a -> Bool | |
78 balanced t = undefined | |
79 | |
80 | |
81 | |
82 {---------------------------------------------------------------------} | |
83 {- Aufgabe G9.3 -} | |
84 | |
85 type Coords = (Int, Int) | |
86 data Shape = Missing | |
87 | |
88 move :: Coords -> Shape -> Shape | |
89 move (x,y) _ = undefined | |
90 | |
91 polygon :: [Shape] -> Bool | |
92 polygon _ = undefined | |
93 | |
94 | |
95 | |
96 {---------------------------------------------------------------------} | |
97 {- Aufgabe H9.1 -} | |
98 | |
99 {- | |
100 Proof me! | |
101 -} | |
102 | |
103 | |
104 | |
105 {---------------------------------------------------------------------} | |
106 {- Aufgabe H9.2 -} | |
107 | |
108 inorder :: Tree a -> [a] | |
109 inorder = undefined | |
110 | |
111 preorder :: Tree a -> [a] | |
112 preorder = undefined | |
113 | |
114 postorder :: Tree a -> [a] | |
115 postorder = undefined | |
116 | |
117 | |
118 | |
119 {---------------------------------------------------------------------} | |
120 {- Aufgabe H9.3 -} | |
121 | |
122 -- makeBalanced :: Int -> SkeleTree | |
123 -- makeBalanced = undefined | |
124 -- | |
125 -- makeAllBalanced :: Int -> SkeleTree | |
126 -- makeAllBalanced = undefined | |
127 | |
128 | |
129 | |
130 {---------------------------------------------------------------------} | |
131 {- Aufgabe H9.4 -} | |
132 | |
133 find23 :: Ord a => a -> Tree23 a -> Bool | |
134 find23 = undefined |