[英]Eq => function in Haskell
我试图弄清楚如何用Haskell中的Eq函数编写此函数。
我尝试实现的一个简单函数是:
f :: Eq a => [a] -> [[a]]
其中f将在单独的子列表下收集每个重复的连续元素,例如:
f [3] = [[3]]
f [1,1,1,3,2,2,1,1,1,1] = [[1,1,1],[3],[2,2],[1,1,1,1]]
我想到了这个功能:
f :: Eq a => [a] -> [[a]]
f [] = []
f (x:[]) = [[x]]
f (x:x':xs) = if x == x' then [[x, x']] ++ (f (xs))
else [[x]] ++ (bundler (xs))
它似乎无法很好地工作,因为当到达最后一个元素时,它想将其与连续的元素进行比较,而后者显然不存在。
而且,我觉得我对Eq =>函数不使用任何东西。
我想收到一个答案,该答案将显示如何在我的情况下正确使用Eq。
提前致谢。
您的类型中存在Eq
类型类是一个红色的鲱鱼:它与您报告的错误无关。 报告错误的原因是,您定义了当列表为空( f [] =
)且列表中至少包含两个元素( f (x:x':xs) =
)时f (x:x':xs) =
,但没有定义何时该列表仅包含一个元素。 解决方案是添加一个开始的案例*
f [x] = ????
并决定如何处理一个元素列表。 或者找到其他方式编写处理所有情况的函数。
*请注意, f [x]
与f (x:[])
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.