あなたは正しい軌道に乗っています。この問題には 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です。それを式に入れるか、casetype で別の関数に渡すことでそれを行うことができます'a -> int。
または、他のことを試すこともできます。リスト内のすべての要素は同じ型でなければなりません。との型を制限する別の方法がxありyます: それらを同じリストに入れます。次に、そのリストを に変換する方法を理解する必要がありintます。