初学者Haskell |整数组列表

时间:2018-10-29 21:09:11

标签: list haskell

我正在尝试创建一个可以列出整数列表的函数,您能帮忙吗?

parseQueryString(session$clientData$url_search)

示例:

groupUp :: [Int] -> [[Int]]

我能找到的最接近的是:

groupUp [1,2,2,3,3,3] == [[1],[2,2],[3,3,3]]

但是,这会将列表限制为最多2个(对)的组,并且不超过2个。我应该改变什么?

编辑:这一项有效,谢谢!

groupUp [] = [[]]
groupUp (x:[]) = []            
groupUp(x:y:xs)
 | x==y       = [x,y] : groupUp (xs)
 | otherwise  = [x] : groupUp (y:xs)

1 个答案:

答案 0 :(得分:6)

使用一个比较元素直到某些条件的功能,而不是费力地比较单个元素。

Prelude> span (==2) [2,2,3,3,3,4,4,4,4]
([2,2],[3,3,3,4,4,4,4])

然后,使用其余的内容递归:

groupUp [] = [[]]   -- This should probably just be [], not [[]].
groupUp (x:xs) = case span (==x) xs of
     (thisGroup, others) -> (x:thisGroup) : groupUp others

当然,您也可以根据需要自己定义span的版本。