仿函数定义中的“不匹配的结构规范”

时间:2012-09-18 17:46:02

标签: sml functor

我正在尝试使用标准ML中的functors进行学习。我写了以下代码,但我一直收到错误Error: unmatched structure specification: Element。任何人都可以指出错误给我。我一直无法找到它:

signature SET_ELEMENT =
 sig
   type element
   val equal: element -> element -> bool
 end

signature SET =
 sig
   type set
   structure Element : SET_ELEMENT

   val empty: set
   val member: Element.element -> set -> bool
 end

functor Set (Element:SET_ELEMENT) :> SET =
  struct
    type element = Element.element
    type set = element list
    val empty = [];

    fun member x [] = false
      | member x (y::ys) = Element.equal x y orelse member x ys;
  end

1 个答案:

答案 0 :(得分:1)

您在Element的签名中声明了名为SET的结构。但是你没有在仿函数输出的结构中定义一个名为Element的结构。

只需添加一行,声明它与仿函数的Element输入相同:

functor Set (Element:SET_ELEMENT) :> SET =
  struct
    structure Element = Element
    type element = Element.element
    type set = element list
    val empty = [];

    fun member x [] = false
      | member x (y::ys) = Element.equal x y orelse member x ys;
  end