2012-11-05 24 views
1

这是代码,我会想象中的列表,可以实现一组数据类型的工作,做工精细一个例子:如何检查在“设置”无缺点运营项目

fun newSet() = nilset; 

fun isMember (k, x::xs) = if k = x then true else isMember (k, xs) 
    | isMember (k, nilset) = false; 

的问题是,我无法将其作为列表实施。以下是实现我的设置的代码。

abstype ''a set = nilset | st of ''a * ''a set 

我如何递归地做到这一点,另一组操作如果::是列表?如果不是这样,为什么会抛出异常?我得到这个,当我使用::

! Type clash: pattern of type 
! ''a set 
! cannot have type 
! ''b list 

感谢您的帮助。

回答

2

这不是一个例外;这是一个类型错误,说您不能使用属于'a list的缺陷构造函数::'a set

假设你有两个构造NilsetSet在递归数据类型:

datatype 'a set = Nilset | Set of 'a * 'a set 

您应按照您的数据类型的递归结构定义isMember

fun isMember (k, Set(x, xs)) = k = x orelse isMember (k, xs) 
    | isMember (k, Nilset) = false 

当然,对于严重的使用的Set,你应该看看Set structure

+0

好的,谢谢。我从来没有在ML编码。我在Java中有一些背景,但我希望能够扩展它。非常感激! –

+0

我添加了一个完整的例子。希望能帮助你开始。 – pad

相关问题