3

考虑这样的代码:

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

我的代码更大,但这就是问题所在。SML 报告“错误:运算符和操作数不一致”。

我是 SML 的初学者,我不知道它为什么会抱怨。这是否类似于 C# 问题,您不能真正比较任何类型的两个值,但您必须对类型使用默认相等比较器?我应该添加一些约束'a(我希望我将它正确地写为泛型类型)?

4

1 回答 1

10

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

前面有两个引号而不是一个的类型是相等类型,这意味着=运算符对其进行操作。不过,这也意味着您不能在非相等类型的事物上调用您的函数。

此外,您实际上不必编写类型。如果你只是这样做:

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

SML 将推断类型。

于 2013-01-15T17:42:19.973 回答