1
这是99个Haskell问题中的第10个问题:运行长度编码代码问题
(*)列表的运行长度编码。使用问题P09的结果来实现所谓的游程编码数据压缩方法。元件的连续的重复编码为列表(NE),其中N是元件E.
实施例的复制品在Haskell数: encode "aaaabccaadeeee"
- >[(4,'a'),(1,'b'),(2,'c'),(2,'a'),(1,'d'),(4,'e')]
这是我的代码:
import Data.List
encode :: [a] -> [(Int,a)]
encode = map (\ws -> (length ws, head ws)) . group
这是我得到的错误:
No instance for (Eq a)
arising from a use of `group'
In the second argument of `(.)', namely `group'
In the expression: map (\ ws -> (length ws, head ws)) . group
In an equation for `encode':
encode = map (\ ws -> (length ws, head ws)) . group
我不明白这有什么错用组,如果我将函数的类型更改为String -> [(Int, Char)]
,它将贯穿始终。
我该如何解决这个问题?
函数组具有类型签名Eq a => [[a]] - > [a]。它根据元素是否相等将a列表并将它们组合在一起(生成a的列表)。要做到这一点,类型a需要是类Eq的一个实例。 – 2011-05-30 02:12:25