【发布时间】:2022-01-06 19:19:49
【问题描述】:
我在 Haskell 中使用二叉搜索树实现了一个 Set 数据类型。我没有使用任何内置函数,也没有导入任何模块。
我设置的数据类型如下:
data Set a = Empty | Node a (Set a) (Set a) deriving(Show)
我已经编写了一个 toList 函数,以及一个使用 insert 函数的 fromList 函数。 我还使用 bst 在集合上编写了一个 setmap 和一个 setfoldr 函数。
我现在只解决一个问题:
-- powerset of a set
-- powerset {1,2} => { {}, {1}, {2}, {1,2} }
powerSet :: Set a -> Set (Set a)
我不知道如何使用这种类型签名来实现 powerSet。对于我需要为此编写什么样的辅助函数,我没有任何线索。我对如何使用列表执行此操作有一些线索,但不使用二叉搜索树。如果可以,请分享一些有关如何执行此操作的提示。 提前致谢!
【问题讨论】:
-
所以你知道如何写
toList,如何找到列表的幂集,以及如何写fromList,但不知道如何找到Set的幂集? -
"如果你能把这个功能的代码分享给我。"
-
@MichaelLitchard- 我只需要一些提示,已编辑该行,谢谢
-
@JosephSible-ReinstateMonica,是的,我编写了所有其他函数,但我不确定如何使用这种类型签名编写这个函数
-
@JosephSible-ReinstateMonica NB 那是
fromList,而不是fromAscendingList。所以他们需要insert,这需要Sets 上的Ord。也许这就是他们遇到的问题。他们真的应该实现fromAscendingList以在此处使用(在上一个问题中,我没有实现该功能并且他们没有跟进)。