Lizz Ross wrote:
Hi im new to Haskell (really just learning).
Im trying to code a function to take in a List of Strings (e.g.) [apple, orange,
banana, orange, apple, orange] , and create
a binary search tree containing the Strings and integers (where the integers are
the number of occurrences of each word.
I think you can use something like this to get statistics about repeats:
data (Ord a, Updateable a) => BinTree a =
Leaf | Node (BinTree a) a (BinTree a)
class Updateable a where
update :: a -> a
data Word_stat = Word_stat String Int deriving Show
instance Eq (Word_stat) where
(==) (Word_stat s1 _) (Word_stat s2 _) = s1 == s2
instance Ord (Word_stat) where
(Word_stat s1 _) < (Word_stat s2 _) = s1 BinTree a -> a -> BinTree a
ins_in_tree Leaf el = Node Leaf el Leaf
ins_in_tree (Node left cur right) el
| el < cur = Node (ins_in_tree left el) cur right
| el == cur = Node left (update cur) right
| otherwise = Node left cur (ins_in_tree right el)
-- loads list of strings in the tree
ins_list :: [String] -> BinTree Word_stat
ins_list lst = foldl ins_in_tree Leaf (map wrap lst)
where wrap :: String -> Word_stat
wrap s = Word_stat s 1
--traverses the tree
flat_tree :: (Ord a, Updateable a) => BinTree a -> [a]
flat_tree Leaf = []
flat_tree (Node left el right) =
(flat_tree left) ++ [el] ++ (flat_tree right)
-- function you probably need
summary :: [String] -> [Word_stat]
summary lst = flat_tree $ ins_list lst
---------------
Am not sure about the relevance of this approach as i have very little
experience with Haskell and FP. So it would be great if someone offers
better solution.
Why doesnt translator automatically deduce constraints in type of
ins_in_tree and flat_tree functions so i need to explicitly define them?