我必须将给定列表拆分为非空子列表,每个子列表按严格升序排列,严格按降序排列,或包含所有相等的元素.例如,[5,6,7,2,1,1,1]应该成为[[5,6,7],[2,1],[1,1]].
这是我到目前为止所做的:
splitSort :: Ord a => [a] -> [[a]]
splitSort ns = foldr k [] ns
where
k a [] = [[a]]
k a ns'@(y:ys) | a <= head y = (a:y):ys
| otherwise = [a]:ns'
Run Code Online (Sandbox Code Playgroud)
我认为我非常接近但是当我使用它时输出[[5,6,7],[2],[1,1,1]而不是[[5,6,7],[2,1] ,[1,1].