我是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]包括哪些我不想要的子集?
无论如何,有没有修复此代码的工作,还是我必须重新考虑我的方法。
我也不想使用内置的库函数,想要正确的基础知识。

最佳答案

就像是

conseqPower = ([] :) . concatMap (tail . inits) . tails

10-07 15:54