3

そのようなコードを考えてみましょう:

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

私のコードはより大きくなりますが、これが問題です。SML が「エラー: 演算子とオペランドが一致しません」と報告します。

私は SML の完全な初心者であり、不平を言う理由がわかりません。これは、どのタイプの 2 つの値も実際には比較できないという C# の問題に似ていますが、そのタイプにはデフォルトの等値比較子を使用する必要がありますか? 何らかの制約を追加する必要がありますか'a(ジェネリック型として正しく記述したことを願っています)。

4

1 に答える 1

10

の代わりに'a、 を使用します''a

引用符の前に 1 つではなく 2 つの引用符がある型は等価型です。これは、=演算子がそれを操作することを意味します。ただし、これは、等値型ではないものに対して関数を呼び出すことができないことも意味します。

また、実際に型を記述する必要はありません。あなただけの場合:

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

SML は型を推測します。

于 2013-01-15T17:42:19.973 に答える