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.