将字符串中的唯一字符转换为Table Char Int

时间:2016-02-07 12:48:04

标签: string haskell char

我尝试将字符串转换为它的唯一字符以及与以下界面的整数计数器:

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'几倍以上可能导致资源使用不合理?

干杯。

1 个答案:

答案 0 :(得分:1)

编写辅助功能

increment :: (Eq k, Num v) => Table k v -> k -> Table k v

将一个值添加到表中的值。您可以使用您拥有的表函数来实现它。

然后扫描字符串,并为每个字符递增一次表。