2012-09-18 35 views
0

我正在嘗試在標準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

你宣佈在SET簽名稱爲Element結構。然而,你並沒有在由函子輸出的結構中定義一個名爲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 
+0

謝謝!那樣做了。 –