私はこのコードのビットがあります。型シグネチャSMLリスト平等奇数判定は
(''a * ''a -> ''a) * ''a list -> ''a
で
fun foldr2(f, x::xs) =
if xs = [] then
x
else
f(x, foldr2(f, xs))
はかなり単純明快に見えますが、それは平等タイプ上で動作機能とリストを取り比較としてxs = []
があるため、引数として等価型を指定します。しかし何らかの理由で、(op +, [2.3, 2.7, 4.0])
のような入力で動作しますが、SML/NJのrealsは等価型ではありません。誰でも私がこの魔法がなぜ起こるのかを明らかにする手助けはできますか?
+1、私はまた、これがなぜ機能するのだろうか。これは、SML/NJが条件ブロックを「null [2.3,2.7,4.0]」またはそれに類するものに変換するのと同じです。 –