繁体   English   中英

Haskell函数返回列表的子列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM