【发布时间】:2017-05-24 22:54:43
【问题描述】:
我正在尝试在 haskell 中创建一个函数,但我的目标是通过在列表上使用 foldr 来实现,这是一个示例:
sublistas [5,1,2]
[[],[2],[1],[1,2],[5],[5,2],[5,1],[5,1,2]]
效率不是问题。到目前为止我尝试的方法给了我错误:
无法构造无限类型.....
sublistas = foldr (\x rs -> [x] ++ map (x:) rs) [[]]
我尝试了很长时间,也许有人可以在这里给我一些想法?
【问题讨论】:
-
您是否故意遗漏了
[5,2],因为您只想要连续的子列表? -
不不@Alec,我忘记了,谢谢,我更新了q
-
没有
foldr的等价物是sublistas = filterM (const [True, False]) -
sublists = foldr (\x l -> l ++ map (x:) l) [[]] -
对于 funzies,连续的子列表将是
sublistas xs = tails xs >>= tail . inits
标签: haskell combinations fold