0

我正在尝试编写一个 Haskell 函数,它将接受一个字符串说“PLATYPUS”,并将返回该单词中字符的相对百分比,即 characterPercentages “PLATYPUS”将返回:[(P,25),(A,13), (L,13),(S,13),(T,13),(U,13),(Y,13)]。我知道我可以使用元组,但在那之后我有点难过?

4

1 回答 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 回答