advertencia en el ML


¿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 función:

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

Gracias de antemano

 25
Author: rookie, 2010-12-01

1 answers

'a significa" cualquier tipo", mientras que ''a significa"cualquier tipo que pueda compararse para la igualdad". Dado que su función alreadyVisited comparó x y v usando =, x y v necesita tener un tipo que admita compararlos para la igualdad, por lo que obtiene el tipo ''a.

La advertencia significa que está 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 igualdad.

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

¿Debería importarle la advertencia? Probablemente no. En la mayoría de los casos argumentaría que tener una función que puede funcionar para cualquier tipo es más importante que tener el código más eficiente posible, así que simplemente ignoraría la advertencia.

 44
Author: sepp2k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-01 19:13:02