Подтвердить что ты не робот

Предупреждение в ML

Может кто-нибудь объяснить, что означает это предупреждение?

stdIn:18.35 Warning: calling polyEqual

и почему у меня есть "a, а не" 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);

заблаговременно

4b9b3361

Ответ 1

'a означает "любой тип", а ''a означает "любой тип, который можно сравнить для равенства". Поскольку ваша функция alreadyVisited сравнивалась с x и v с помощью =, x и v должна иметь тип, который поддерживает их сравнение для равенства, поэтому вы получаете тип ''a.

Предупреждение означает, что вы сравниваете два значения с полиморфным типом для равенства.

Почему это вызывает предупреждение? Потому что он менее эффективен, чем сравнение двух значений известных типов для равенства.

Как вы избавитесь от предупреждения? Изменяя свою функцию только для работы с определенным типом, а не с любым типом.

Если вы заботитесь о предупреждении? Возможно нет. В большинстве случаев я бы сказал, что наличие функции, которая может работать для любого типа, важнее, чем использование самого эффективного кода, поэтому я просто проигнорирую это предупреждение.