【问题标题】:How to examine items in a "set" without a cons operator如何在没有 cons 运算符的情况下检查“集合”中的项目
【发布时间】:2012-11-05 22:15:45
【问题描述】:

这是一个代码示例,我认为它可以在以列表形式实现的集合数据类型中正常工作:

fun newSet() = nilset;

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

问题是我无法将它实现为列表。下面是我的set的实现代码。

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

如果:: 用于列表,我如何递归地执行此操作和其他设置操作?如果不是,为什么会抛出异常?当我使用:: 时,我得到了这个:

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

感谢您的帮助。

【问题讨论】:

    标签: sml ml abstract-data-type


    【解决方案1】:

    这也不例外;这是一个类型错误,表示您不能将属于 'a list 的 cons 构造函数 ::'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

    【讨论】:

    • 好的,谢谢。我以前从未在 ML 中编写过代码。我有一点 Java 的背景,但我希望能扩展它。非常感谢!
    • 我添加了一个完整的例子。希望能帮助您入门。
    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多