あなたは正しい軌道に乗っています。この問題には 2 つの部分があることを理解しているようです:x
とy
を同じ型にするfoo
ことと、整数を返すことを強制することです。
あなたは と親しかったfun foo (x,x) = 5;
。おそらく次のような意味だと思います。
fun foo (x,y) = if x=y then 1 else 0;
これは''a * ''a -> int
、非常に近いですが、必要なものではありません。''a
と同じではありません'a
- 1 つのダッシュは「任意の型」を意味し、2 つのダッシュは「等しいかどうか比較できる任意の型」を意味します。つまり、 と言うだけで型を制限してしまいましたx=y
。
型を強制的に同じにする 1 つの方法を特定しました。それは、型をif
式の結果に入れることです。あとは、if
( type を持つ'a
) の結果を に変換するだけint
です。それを式に入れるか、case
type で別の関数に渡すことでそれを行うことができます'a -> int
。
または、他のことを試すこともできます。リスト内のすべての要素は同じ型でなければなりません。との型を制限する別の方法がx
ありy
ます: それらを同じリストに入れます。次に、そのリストを に変換する方法を理解する必要がありint
ます。