use*_*248 5 recursion haskell list-comprehension powerset
我是一个完整的 Haskell 初学者,我有 11 个作业练习,其中 10 个我已经解决了。我找到了几种解决方案来获得集合的幂集,但没有一个包括列表理解。我知道在这种情况下我不应该要求一个完整的答案(因为这是家庭作业),但我非常感谢任何反馈/线索。
集合S的幂集是包含S 的所有子集的集合。编写一个递归函数
powerset,返回一个包含给定集合的所有子集的集合。使用直接递归和列表理解。
使用直接递归和列表推导:
type Set a = [a]
powerset :: Set a -> Set (Set a)
powerset [] = [[]]
powerset (x:xs) = [x:ps | ps <- powerset xs] ++ powerset xs
Run Code Online (Sandbox Code Playgroud)
好的,这是我的提示:
如果您查看类似的内容,(x:xs)您现在可以选择是否包含 x在您的子集中。
不知何故必须同时使用这两种选择(可能与(++);))...
现在记住其他提示(递归xs.......),如果你考虑一下,也许你会得到一个想法[x:ys | ys <- ...]
顺便说一句:这几乎是作弊,但如果您使用do符号找到了解决方案:这真的很容易转化为列表推导式 ;) - 也许您可以发布一下您的进度?
文本显示“使用直接递归”。因此,当您需要计算时,subsets (x:xs)可以从考虑subsets xs递归调用开始。有什么方法可以将xs的子集转换为 的子集x:xs,也许使用列表理解?
| 归档时间: |
|
| 查看次数: |
8843 次 |
| 最近记录: |