我正在尝试编写一个Haskell函数,该函数将使用字符串“PLATYPUS”并返回该单词中字符的相对百分比,即characterPercentages“PLATYPUS”将返回:[(P,25),(A, 13),(L,13),(S,13),(T,13),(U,13),(Y,13)]。我知道我可以使用元组,但之后我有点难过?
答案 0 :(得分: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)]
您可以将group
的{{1}}分组列表与使用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)]