sml smlnj

sml - advertencia en el ML



smlnj (1)

¿Puede alguien explicar, por favor, qué significa esta advertencia?

stdIn:18.35 Warning: calling polyEqual

y ¿por qué tengo "a y no ''a en la siguiente declaración:

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

esta es la funcion

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

gracias por adelantado


''a significa "cualquier tipo", mientras que ''''a significa "cualquier tipo que se pueda comparar por igualdad". Debido a que su función ya alreadyVisited x y v usando = , x y v necesita tener un tipo que permita compararlos para igualdad, de modo que obtenga el tipo ''''a .

La advertencia significa que estás comparando dos valores con el tipo polimórfico para la igualdad.

¿Por qué esto produce una advertencia? Porque es menos eficiente que comparar dos valores de tipos conocidos para la igualdad.

¿Cómo deshacerse de la advertencia? Al cambiar su función para que solo funcione con un tipo específico en lugar de cualquier tipo.

¿Debes preocuparte por la advertencia? Probablemente no. En la mayoría de los casos, diría que tener una función que pueda funcionar para cualquier tipo es más importante que tener el código más eficiente posible, por lo que simplemente ignoro la advertencia.