List 使用列表理解计算列表中的元素

List 使用列表理解计算列表中的元素,list,function,haskell,List,Function,Haskell,我是Haskell的新手,正在尝试编写一个简单的函数。我想让每一个元素被它即将到来的频率压缩 例如输入:“aabbcca”,我想得到的结果是 [('a',2), ('b',2), ('c',2), ('a',1)] 我的代码现在如下所示: import Data.List compress :: String -> [(Char, Int)] compress n = [ (x,y) | x:xs <- group n, y <- ? ] 导入数据。列表 压缩::字符串-

我是Haskell的新手,正在尝试编写一个简单的函数。我想让每一个元素被它即将到来的频率压缩

例如输入:
“aabbcca”
,我想得到的结果是

[('a',2), ('b',2), ('c',2), ('a',1)]
我的代码现在如下所示:

import Data.List

compress :: String -> [(Char, Int)]
compress n = [ (x,y) | x:xs <- group n, y <- ? ]
导入数据。列表
压缩::字符串->[(字符,整数)]

压缩n=[(x,y)| x:xs此处不需要使用列表中的另一个生成器。您可以在此处计算组
xs
的值。我们在此处使用an既可以访问整个组,也可以访问该组的第一项:

compress :: Eq a => [a] -> [(a, Int)]
compress n = [ (x, length xs) | xs@(x:_) <- group n ]
compress::Eq a=>[a]->[(a,Int)]

压缩n=[(x,长度xs)|xs@(x:)现在我正在尝试使用解压缩函数,但仍然无法理解列表。
decompress::[(Int,Char)]->String decompress n=[x | x@vNSkyline我注意到的第一件事是您切换了
Int
,而
Char
复制
的类型是
Int->a->[a]
,因此它永远不能将
映射的结果作为第一个参数。您可能不想转换整个列表,而是想单独查看每个项目。@Khuldraesethna'Barya是的,我更改了它,但我的想法是从元组中获取频率编号,并用该编号复制字符。是否还有其他方法可以更改那?@vNSkyline
解压n=[x |(c,f)