【发布时间】:2011-03-01 08:41:51
【问题描述】:
就这么简单。我想使用列表推导生成列表的所有子列表。
即:getSublist [1,2,3] 是 [[1], [2], [3], [1,2], [1,3], [2, 3], [1,2, 3]]
谢谢
【问题讨论】:
-
确实要排除空列表吗?
标签: haskell functional-programming list-comprehension
就这么简单。我想使用列表推导生成列表的所有子列表。
即:getSublist [1,2,3] 是 [[1], [2], [3], [1,2], [1,3], [2, 3], [1,2, 3]]
谢谢
【问题讨论】:
标签: haskell functional-programming list-comprehension
这已经实现为Data.List.subsequences,但是如果你想自己定义它(用于学习目的),你可以这样做:
你不能只用列表推导来做到这一点,但通过一些递归它看起来像这样:
sublists [] = [[]]
sublists (x:xs) = [x:sublist | sublist <- sublists xs] ++ sublists xs
读取:空列表的唯一子列表是空列表。 x:xs 的子列表(即头部x 和尾部xs 的列表)是xs 的所有子列表以及xs 的每个子列表,前面加上x .
【讨论】:
subList 您在此处编写它的方式仅针对非空列表定义 - 仅针对两个构造函数之一。
sublists = filterM $ const [False, True]