私はこのビットのコードを持っています:
fun foldr2(f, x::xs) =
if xs = [] then
x
else
f(x, foldr2(f, xs))
型シグネチャ付き
(''a * ''a -> ''a) * ''a list -> ''a
xs = []
かなり単純に見えますが、比較のために、等値型と等値型のリストを引数として機能する関数を取ります。ただし、何らかの理由で(op +, [2.3, 2.7, 4.0])
、SML/NJ 実数が等値型でない場合、 などの入力で機能します。この魔法が発生する理由を明らかにするのを手伝ってくれる人はいますか?