37

誰か説明してもらえますか、この警告はどういう意味ですか?

stdIn:18.35 Warning: calling polyEqual

また、次のステートメントに「a」が含まれているのはなぜですか。

val alreadyVisited = fn : ''a * ''a list -> bool

これは私の機能です:

fun alreadyVisited(v, []) = false
    | alreadyVisited(v, x::xs) = if(x=v) then true
        else alreadyVisited(v, xs);
4

1 に答える 1

56

'a「任意のタイプ」を''a意味し、「同等性を比較できる任意のタイプ」を意味します。alreadyVisited関数がを比較xしてv使用=xているのでv、それらの同等性の比較をサポートする型が必要なので、型を取得します''a

警告は、2つの値をポリモーフィックタイプと比較して等しいことを意味します。

なぜこれが警告を生成するのですか?既知のタイプの2つの値を比較して等しいかどうかを比較するよりも効率が悪いためです。

警告をどのように取り除きますか?任意のタイプではなく特定のタイプでのみ機能するように関数を変更する。

警告を気にする必要がありますか?おそらくそうではありません。ほとんどの場合、可能な限り最も効率的なコードを使用するよりも、どのタイプでも機能する関数を使用する方が重要であると主張するので、警告は無視します。

于 2010-12-01T19:13:02.790 に答える