我正在尝试编写一个 Haskell 函数,它将接受一个字符串说“PLATYPUS”,并将返回该单词中字符的相对百分比,即 characterPercentages “PLATYPUS”将返回:[(P,25),(A,13), (L,13),(S,13),(T,13),(U,13),(Y,13)]。我知道我可以使用元组,但在那之后我有点难过?
问问题
929 次
1 回答
2
首先,您需要了解您将获得什么。
据我了解,您希望拥有
type String = [Char] --already in Prelude
String -> [(Char,Int)]
"PLATYPUS" -=> [('P',2),('A',1),('L',1),('S',1),('T',1),('U',1),('Y',1)]
您可以将Data-Listgroup
中的分组列表与使用函数的映射相结合length
String -> [[Char]]
[[Char]] -> [(Char,Int)]
更新
如果我们谈论第一部分 - 计算字母,我们可以接下来做:
> :m Data.List
> map (\c -> (head c, length c)) $ group $ sort "PLATYPUSAAA"
[('A',4),('L',1),('P',2),('S',1),('T',1),('U',1),('Y',1)]
所以,让我们找到相对数字,我们length c
改为100*(length c) 'div' ls
:
> let frqLetters s = let ls = length s in
map (\c -> (head c, 100 * (length c) `div` ls)) $ group $ sort s
> frqLetters "PLATYPUSAAA"
[('A',36),('L',9),('P',18),('S',9),('T',9),('U',9),('Y',9)]
于 2013-10-11T17:55:41.363 回答