我尝试将字符串转换为它的唯一字符以及与以下界面的整数计数器:
empty :: Table k v
insert :: Eq k => Table k v -> k -> v -> Table k v
exists :: Eq k => Table k v -> k -> Bool
lookup :: Eq k => Table k v -> k -> Maybe v
delete :: Eq k => Table k v -> k -> Table k v
iterate :: Table k v -> (b -> (k, v) -> b) -> b -> b
keys :: Table k v -> (b -> k -> b) -> b -> b
values :: Table k v -> (b -> v -> b) -> b -> b
到目前为止我的功能如下:
auxCharacterCounts :: String -> Table Char Int
auxCharacterCounts (x:xs)
| length (x:xs) > 1 = (Table.insert Table.empty x (length $ filter (\y -> y == x) (x:xs)))
例如传递字符串" sassa"到auxCharacterCounts
然后运行lookup tablename 's'
会产生Just 3
告诉我们我们已经发现了3个字符串'在字符串" sassa"。我坚持的是如何获取其他角色,所以说运行lookup tablename 'a'
会产生结果Just 2
(对着字符串" sassa")
我不确定如何以递归的方式运行,我可以以某种方式传递尾巴吗?但如果我这样做,它会找到char'几倍以上可能导致资源使用不合理?
干杯。
答案 0 :(得分:1)
编写辅助功能
increment :: (Eq k, Num v) => Table k v -> k -> Table k v
将一个值添加到表中的值。您可以使用您拥有的表函数来实现它。
然后扫描字符串,并为每个字符递增一次表。