【发布时间】:2012-03-22 23:14:52
【问题描述】:
我是 haskell 的新手,正在尝试编写一个函数来生成一个仅包含连续子集的 powerset 例如:[1,2,3] -> [[],[1],[2],[3],[1,2],[2,3],[1,2,3]]
我在博客 http://davidtran.doublegifts.com/blog/?p=7 上找到了这个
powerset :: [a] -> [[a]]
powerset [] = [[]]
powerset (x:xs) = powerset xs ++ map (x:) (powerset xs)
-- powerset (x:xs) = powerset xs ++ [x:xs' | xs' <- powerset xs]
但这会生成我不想要的所有子集,即包含的 [1,3]? 无论如何要修复此代码以使其正常工作,还是我必须重新考虑我的方法。 我也不想使用内置的库函数,想把我的基础知识搞好。
【问题讨论】:
-
“连续子集”是什么意思?
-
我的意思是 [1,2] [2,3] 但不是 [1,3]
-
作为术语:我通常看到人们使用术语 substring 来指代“连续的子集”,而术语 subsequence 用于不一定是连续的子集。
-
@missingno:这很有意义!我不知何故有一个(愚蠢的)想法,即子集 themself 必须是连续的(或者你可以通过“加 1”从 [1,2] 到 [2,3]),而不是元素它们包含。
标签: haskell functional-programming