предупреждение В мл
Может кто-нибудь объяснить, что означает это предупреждение?
stdIn:18.35 Warning: calling polyEqual
И почему у меня есть "А", а не " а " в следующем утверждении:
val alreadyVisited = fn : ''a * ''a list -> bool
Это функция:
fun alreadyVisited(v, []) = false
| alreadyVisited(v, x::xs) = if(x=v) then true
else alreadyVisited(v, xs);
Заранее спасибо
1 ответ:
'a
означает "любой тип", в то время как''a
означает"любой тип, который можно сравнить для равенства". Так как ВашаalreadyVisited
Функция сравниваетсяx
иv
с помощью=
,x
иv
должен иметь тип, который поддерживает сравнение их на равенство, поэтому вы получаете тип''a
.Предупреждение означает, что вы сравниваете два значения с полиморфным типом для равенства.
Почему это вызывает предупреждение? Потому что это менее эффективно, чем сравнение двух значений известных типов для равенство.
Как избавиться от предупреждения? Изменив функцию на работу только с определенным типом вместо любого типа.
Стоит ли беспокоиться о предупреждении? Скорее всего, нет. В большинстве случаев я бы сказал, что наличие функции, которая может работать для любого типа, важнее, чем наличие максимально эффективного кода, поэтому я просто игнорирую предупреждение.