我正在尝试在Haskell中创建一个powerset(我对它很陌生),并且我无法弄清楚为了让一个没有地图而需要做什么。 WITH map and lambda,I found this solution:如何在不使用Haskell中的map或lambda的情况下制作powerset?
powerset :: Set a -> Set (Set a)
powerset [] = [[]]
powerset (head:tail) = powerset tail >>= \set ->[set, head:set]
powerset (x:xs) = map (x:) (powerset xs) ++ powerset xs
这不是我想要的。我查看了其他问题,无法找到我正在寻找的答案。帮助将不胜感激!
编辑:这是我到目前为止..它显然不工作,但我试图!
powerset :: Set a -> Set (Set a)
powerset [] = [[]]
powerset (x:xs) = [x + (powerset xs)] + powerset xs
您还有什么感兴趣的其他方式?列表解析?另外我想你忘了说你已经定义了'type Set a = [a]',并且你没有使用['containers']中的那个(https://hackage.haskell.org/package/containers-0.5 .7.1/docs/Data-Set.html) – epsilonhalbe
你没有告诉我们的错误部分是由于'(+)'只处理数字类型而不是列表 - 你应该使用'(++)'代替。 – epsilonhalbe
@epsilonhalbe是的,我想使用列表解析!也是的,我在创建我的功能之前做了这个:type Set a = [a] 同样我会改为++ :) – TurboCrackers