[英]How can I write a function in Haskell that takes a list of Ints and returns all the contiguous sublists of that list?
[英]Haskell function that returns sublists of a list
我在Haskell中编写了一个函数,当给定一个数字列表时,该函数将返回一个列表,其中包含该原始列表的所有子列表(按顺序)。 到目前为止,我有:
sublists [] = [[]]
sublists (x:xs) = [x:sublist | sublist <- sublists xs] ++ sublists xs
如果给出[1,2,3]
,则上述代码将返回[[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]]
,这并不是我想要的。 相反,该函数应返回:
[[1],[1,2],[1,2,3]]
如何修改给定的代码以获得此结果?
你为什么不拿第一n
从列表元素n
1和输入的长度之间?
sublists :: [a] -> [[a]]
sublists xs = [ take n xs | n <- [1..length xs] ]
> sublists [1,2,3]
[[1],[1,2],[1,2,3]]
或者使用递归和模式匹配
sublists' :: [a] -> [[a]]
sublists' xs = sublist [] xs where
sublist a [b] = [ a ++ [b] ]
sublist a (b:bs) = [ a ++ [b] ] ++ sublist (a ++ [b]) bs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.