-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path20150414.hs
32 lines (26 loc) · 984 Bytes
/
20150414.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
data Tree t = NilT | Node t (Tree t) (Tree t)
deriving (Eq, Show)
test :: Tree Int
test = (Node 5 (Node 7 (Node 15 NilT (Node 6 (Node 13 (Node 5 NilT NilT) NilT) NilT)) (Node 2 NilT NilT)) (Node 10 NilT NilT))
filterS :: (t -> Bool) -> Tree t -> Tree t
filterS f NilT = NilT
filterS f (Node n l r)
| f n = (Node n (filterS f l) (filterS f r))
| otherwise = NilT
subTree :: (t -> Bool) -> Tree t -> [Tree t]
subTree f NilT = []
subTree f (Node n l r)
| f n = (subTree f l) ++ (subTree f r)
| otherwise = (filterTree f l) ++ (filterTree f r)
filterTree :: (t -> Bool) -> Tree t -> [Tree t]
filterTree f NilT = []
filterTree f (Node n l r)
| f n = [filterS f (Node n l r)] ++ (subTree f l) ++ (subTree f r)
| otherwise = (filterTree f l) ++ (filterTree f r)
map2 :: (t -> t) -> [(t->t)] -> [(t->t)]
map2 f [] = []
map2 f (a:as) = funcOFunc : map2 f as
where funcOFunc y = f (a y)
compose :: (t->t) -> [(t->t)] -> [(t->t)]
compose _ [] = []
compose f x= map2 f x