我的问题是如何实现这个:
import Data.Char
import Data.List
freq :: [String] -> [(String ,Int)]
freq words = []
在Haskell。我想计算特定字符串在字符串列表中出现的次数。
答案 0 :(得分:1)
实现这一目标的方法是:
使用的函数是来自sort
的{{1}}和group
:
Data.List
sort :: Ord a => [a] -> [a]
group :: Eq a => [a] -> [[a]]
的工作原理示例:
group
所以现在你必须将一组相同的元素(如group [1,1,1,2,3,3,4] -> [ [1,1,1], [2], [3,3], [4] ]
)转换为元组[1,1,1]
。我会留下那个让你弄明白的。
(1,3)
的完整定义如下:
freq
答案 1 :(得分:0)
如评论中所述,使用Data.Map
:
freq :: [String] -> [(String ,Int)]
freq words = toList $ fromListWith (+) [(w, 1) | w <- words]
答案 2 :(得分:0)
https://www.haskell.org/hoogle可能是你的朋友。您可能希望使用类型为签名[a] -> a -> Int
的函数。在hoogeling之后你会立即找到:
elemIndices :: Eq a => a -> [a] -> [Int]
base Data.List
The elemIndices function extends elemIndex, by returning the indices of all elements equal to the query element, in ascending order.