Sml 警告:呼叫Polyqual
谁能解释一下,这个警告是什么意思Sml 警告:呼叫Polyqual,sml,smlnj,Sml,Smlnj,谁能解释一下,这个警告是什么意思 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 alreadyVisi
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);
'a
表示“任何类型”,而'a
表示“任何可以进行平等比较的类型”“。由于您的函数已经使用=
对x
和v
进行了比较,x
和v
需要有一个支持对它们进行相等比较的类型,因此您得到的类型是''a
该警告意味着您正在比较两个多态类型的值以获得相等性
为什么会产生警告?因为它比比较两个已知类型的相等值效率低
你如何摆脱这个警告?通过将函数更改为仅使用特定类型而不是任何类型
你应该关心这个警告吗?可能不会。在大多数情况下,我会认为拥有一个可以适用于任何类型的函数比拥有尽可能高效的代码更重要,所以我会忽略这个警告。我在可能简化的情况下得到同样的警告:fun some_fun((*stuff*)=[]可能是因为编译器无法推断空列表的类型。比如说,在列表中放入一个字符串会使警告消失。