2013-01-15 119 views
2

考慮這樣的代碼:如何比較泛型類型的值?

fun equals(a : 'a,b : 'a) = 
    a = b; 

我的代碼是大,但是這就是問題所在。 SML報告「錯誤:操作符和操作數不同意」。

我完全初學SML,我不知道它爲什麼抱怨。這是類似於C#的問題,你不能真正比較任何類型的兩個值,但你必須使用默認的相等比較器的類型?我應該在'a上添加一些約束(我希望我把它寫成正確的類型)?

回答

8

而不是'a,請使用''a

在它前面有兩個引號而不是一個的類型是相等類型,這意味着=運算符對它起作用。這也意味着你不能在不是平等類型的東西上調用你的函數。

另外,您實際上並不需要編寫這些類型。如果你這樣做:

fun equals (a,b) = a = b; 

SML將推斷類型。

+0

謝謝您的解決方案,解釋和所有:-)。最後一種形式確實是最好的形式。 – greenoldman