gpt4 book ai didi

Haskell - 计算列表中每个不同元素出现的次数

转载 作者:行者123 更新时间:2023-12-02 02:14:29 25 4
gpt4 key购买 nike

我是 Haskell 的新手,只是想编写一个列表理解来计算列表中每个不同值的频率,但我在最后一部分遇到了麻烦..

到目前为止我有这个:

frequency :: Eq a => [a] -> [(Int,a)] 
frequency list = [(count y list,y) | y <- rmdups ]

最后涉及 rmdups 的部分有问题。

count函数接受一个字符,然后是一个字符列表,并告诉您该字符出现的频率,代码如下。

count :: Eq a => a -> [a] -> Int
count x [] = 0
count x (y:ys) | x==y = 1+(count x ys)
| otherwise = count x ys

提前谢谢您。

最佳答案

在计算频率时,您还可以使用关联数组/有限映射来存储列表元素与其计数的关联:

import Data.Map (fromListWith, toList)

frequency :: (Ord a) => [a] -> [(a, Int)]
frequency xs = toList (fromListWith (+) [(x, 1) | x <- xs])

使用示例:

> frequency "hello world"
[(' ',1),('d',1),('e',1),('h',1),('l',3),('o',2),('r',1),('w',1)]

请参阅 fromListWith 的文档和 toList .

关于Haskell - 计算列表中每个不同元素出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10398698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com