我正在尝试创建一个可以列出整数列表的函数,您能帮忙吗?
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)
答案 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的版本。