在 Haskell 中使用列表数据结构创建集合数据类型



在 Haskell 中写入插入和成员操作。确保在 ML 中 和 Haskell,您的 Set 数据类型不同于列表。在哈斯克尔, 将 Set 类型定义为类均衡器和显示的实例。

let setAdd l n = if (elem l n) then l else l ++ [n]
let setMember l i = l !! i

我上面写的代码只是让它具有在列表上执行的函数。

有没有办法把它变成一个类?对不起,我只是在学习函数式编程。有没有办法实际制作一个具有成员变量的 Set 类,例如列表?

您在此处的数据类型是 [a] ,它已经有可用的实例,包括 EqShow(顺便说一下,它们做正确的事情)。

如果要编写自己的实例,则应以类似于以下内容的方式newtype基础类型:

newtype Set a = Set { getSet :: [a] }

然后你可以写:

instance Show a => Show (Set a) where
    show (Set a) = ...
instance Eq a => Eq (Set a) where
    Set a == Set b = ...

最新更新