@@ -20,10 +20,9 @@ module Main where
20
20
21
21
import qualified Data.List
22
22
import qualified Trie
23
- import Patricia
24
23
25
24
-- find all candidates in Trie
26
- findAll :: Trie. Trie a -> String -> [(String , a )]
25
+ findAll :: Trie. Trie Char v -> String -> [(String , v )]
27
26
findAll t [] =
28
27
case Trie. value t of
29
28
Nothing -> enum (Trie. children t)
@@ -36,30 +35,8 @@ findAll t (k:ks) =
36
35
Nothing -> []
37
36
Just t' -> mapAppend k (findAll t' ks)
38
37
39
- mapAppend x lst = map (\ p-> (x: (fst p), snd p)) lst
38
+ mapAppend x = map (\ p-> (x: (fst p), snd p))
40
39
41
- -- find all candidates in Patricia
42
- findAll' :: Patricia a -> Key -> [(Key , a )]
43
- findAll' t [] =
44
- case value t of
45
- Nothing -> enum $ children t
46
- Just x -> (" " , x): (enum $ children t)
47
- where
48
- enum [] = []
49
- enum (p: ps) = (mapAppend' (fst p) (findAll' (snd p) [] )) ++ (enum ps)
50
- findAll' t k = find' (children t) k where
51
- find' [] _ = []
52
- find' (p: ps) k
53
- | (fst p) == k
54
- = mapAppend' k (findAll' (snd p) [] )
55
- | (fst p) `Data.List.isPrefixOf` k
56
- = mapAppend' (fst p) (findAll' (snd p) (k `diff` (fst p)))
57
- | k `Data.List.isPrefixOf` (fst p)
58
- = findAll' (snd p) []
59
- | otherwise = find' ps k
60
- diff x y = drop (length y) x
61
-
62
- mapAppend' s lst = map (\ p-> (s++ (fst p), snd p)) lst
63
40
64
41
-- T9 mapping
65
42
mapT9 = [(' 2' , " abc" ), (' 3' , " def" ), (' 4' , " ghi" ), (' 5' , " jkl" ),
@@ -74,36 +51,20 @@ lookupT9 c children = case lookup c mapT9 of
74
51
Just t -> (x, t): lst
75
52
76
53
-- T9-find in Trie
77
- findT9 :: Trie. Trie a -> String -> [(String , Maybe a )]
54
+ findT9 :: Trie. Trie Char v -> String -> [(String , Maybe v )]
78
55
findT9 t [] = [(" " , Trie. value t)]
79
56
findT9 t (k: ks) = foldl f [] (lookupT9 k (Trie. children t))
80
57
where
81
58
f lst (c, tr) = (mapAppend c (findT9 tr ks)) ++ lst
82
59
83
- -- T9-find in Patricia
84
- findPrefixT9' :: String -> [(String , b )] -> [(String , b )]
85
- findPrefixT9' s lst = filter f lst where
86
- f (k, _) = (toT9 k) `Data.List.isPrefixOf` s
87
-
88
60
toT9 = map (\ c -> head $ [ d | (d, s) <- mapT9, c `elem` s])
89
61
90
- findT9' :: Patricia a -> String -> [(String , Maybe a )]
91
- findT9' t [] = [(" " , value t)]
92
- findT9' t k = foldl f [] (findPrefixT9' k (children t))
93
- where
94
- f lst (s, tr) = (mapAppend' s (findT9' tr (k `diff` s))) ++ lst
95
- diff x y = drop (length y) x
96
-
97
62
-- test
98
- testFindAll = " t=" ++ (Trie. toString t) ++
63
+ testFindAll = " t=" ++ (show t) ++
99
64
" \n look up a: " ++ (show $ take 5 $ findAll t " a" ) ++
100
- " \n look up ab: " ++ (show $ take 5 $ findAll t " ab" ) ++ " \n\n " ++
101
- " t'=" ++ (toString t') ++
102
- " \n look up a: " ++ (show $ take 5 $ findAll' t' " a" ) ++
103
- " \n look up ab: " ++ (show $ take 5 $ findAll' t' " ab" )
65
+ " \n look up ab: " ++ (show $ take 5 $ findAll t " ab" ) ++ " \n\n "
104
66
where
105
67
t = Trie. fromList lst
106
- t'= fromList lst
107
68
lst= [(" a" , " the first letter of English" ),
108
69
(" an" , " used instead of 'a' when the following word begins with a vowel sound" ),
109
70
(" another" , " one more person or thing or an extra amount" ),
@@ -114,23 +75,14 @@ testFindAll = "t=" ++ (Trie.toString t) ++
114
75
(" bodyl" , " the whole physical structure that forms a person or animal" ),
115
76
(" zoo" , " an area in which animals, especially wild animals, are kept so that people can go and look at them, or study them" )]
116
77
117
- testFindT9 = " t=" ++ (Trie. toString t) ++
78
+ testFindT9 = " t=" ++ (show t) ++
118
79
" \n press 4: " ++ (show $ take 5 $ findT9 t " 4" )++
119
80
" \n press 46: " ++ (show $ take 5 $ findT9 t " 46" )++
120
81
" \n press 4663: " ++ (show $ take 5 $ findT9 t " 4663" )++
121
82
" \n press 2: " ++ (show $ take 5 $ findT9 t " 2" )++
122
- " \n press 22: " ++ (show $ take 5 $ findT9 t " 22" )++
123
- " \n\n t'=" ++ (toString t') ++
124
- " \n press 4: " ++ (show $ take 5 $ findT9' t' " 4" )++
125
- " \n press 46: " ++ (show $ take 5 $ findT9' t' " 46" )++
126
- " \n press 466: " ++ (show $ take 5 $ findT9' t' " 466" )++
127
- " \n press 4663: " ++ (show $ take 5 $ findT9' t' " 4663" )++
128
- " \n press 2: " ++ (show $ take 5 $ findT9' t' " 2" )++
129
- " \n press 22: " ++ (show $ take 5 $ findT9' t' " 22" )
130
-
83
+ " \n press 22: " ++ (show $ take 5 $ findT9 t " 22" )
131
84
where
132
85
t = Trie. fromList lst
133
- t' = fromList lst
134
86
lst = [(" home" , 1 ), (" good" , 2 ), (" gone" , 3 ), (" hood" , 4 ), (" a" , 5 ), (" another" , 6 ), (" an" , 7 )]
135
87
136
88
main = do
0 commit comments