计算字符串列表中的字符串并将其转换为元组,如[(String,int)]|Haskell
我的问题是如何实施这一点:计算字符串列表中的字符串并将其转换为元组,如[(String,int)]|Haskell,haskell,tuples,Haskell,Tuples,我的问题是如何实施这一点: import Data.Char import Data.List freq :: [String] -> [(String ,Int)] freq words = [] 在哈斯克尔。我想计算特定字符串在字符串列表中出现的次数。基本方法是: 对列表排序 将连续相等的元素累积到组中 计算每组的长度 所使用的功能是数据中的排序和分组。列表: sort :: Ord a => [a] -> [a] group :: Eq a => [a] -&g
import Data.Char
import Data.List
freq :: [String] -> [(String ,Int)]
freq words = []
在哈斯克尔。我想计算特定字符串在字符串列表中出现的次数。基本方法是:
数据中的排序
和分组
。列表
:
sort :: Ord a => [a] -> [a]
group :: Eq a => [a] -> [[a]]
组
工作原理示例:
group [1,1,1,2,3,3,4] -> [ [1,1,1], [2], [3,3], [4] ]
因此,现在必须将一组相等的元素,如[1,1,1]
转换为元组(1,3)
。我会留给你去弄清楚的
freq
的完整定义如下所示:
freq :: [String] -> [ (String,Int) ]
freq xs = map pair (group ( sort xs ))
where pair = ...(your definition here)...
如评论中所述,使用
Data.Map
:
freq :: [String] -> [(String ,Int)]
freq words = toList $ fromListWith (+) [(w, 1) | w <- words]
freq::[String]->[(String,Int)]
freq words=toList$fromListWith(+)[(w,1)| w可能是您的朋友。您可能希望使用具有类型签名[a]->a->Int
的函数。hoogeling后,您将立即发现:
elemIndices::Eq a=>a->[a]->[Int]
基本数据列表
elemIndices函数通过按升序返回与查询元素相等的所有元素的索引来扩展elemIndex。
那么您在哪里有问题?查看数据中的函数。映射如果您首先编写freqMap::[String]->Map String Int
一点提示从何处开始会很好。只需知道使用什么…@mojo92查看数据.Map
,其中有几个函数可以更新或插入映射中的键,因此实现这一点应该非常简单。或者,您可以对字符串列表进行排序先编写函数insert1::String->[(String,Int)]->[(String,Int)]
insert1 x m
通过创建新项(x,0)将x插入列表m如果列表中不存在x,则将x的计数增加1。