【发布时间】:2022-11-30 23:16:18
【问题描述】:
我必须在 Haskell 中将集合实现为抽象数据类型。任务如下:
集合对一组元素建模。集合是空集或递归地由一个元素和集合的其余部分组成是有效的。 将定义函数 isEmpty、contains、add、remove。
- 函数 isEmpty 检查集合是否为空。
- contains 采用一个集合和一个元素,并指示该集合是否包含该元素。
- add 接受一个集合和一个元素,如果该元素不在集合中,则将其添加到集合中。尚未包含在集合中
- remove 函数采用一个集合和一个元素,如果该元素已在集合中,则从集合中删除该元素。如果元素不是集合的一部分,则函数返回错误。
我正在为任务的递归部分而苦苦挣扎,我不知道。我该如何具体实施“包含”?
module Set (Set(EmptySet, MkSet), isEmpty, contains, add, remove)
where
data Set a = EmptySet | MkSet a (Set a)
deriving (Show, Eq, Enum, Ord, Read)
isEmpty :: Set a -> Bool
isEmpty EmptySet = True
isEmpty (MkSet a as) = False
contains :: Set a -> a -> Bool
contains EmptySet = error "no element in set."
contains (MkSet a as) a = True
contains (MkSet a as) b = False
add :: a -> Set a -> Set a
add a as = (MkSet a as)
remove :: Set a -> Set a
remove EmptySet = error "No remove operation on empty set allowed."
remove (MkSet a as) = as
【问题讨论】:
-
抽象数据类型是具有接口但没有实现的数据类型。您正在定义一个具体的数据类型。