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);
提前致谢
答案 0 :(得分:46)
'a
表示“任何类型”,而''a
表示“可以比较相等的任何类型”。由于您的alreadyVisited
函数使用x
与v
和=
进行了比较,因此x
和v
需要一种支持比较它们的类型,所以你得到类型''a
。
警告意味着您要将两个值与多态类型进行比较以获得相等。
为什么会产生警告?因为效率低于比较已知类型的两个值是否相等。
你如何摆脱警告?通过将您的功能更改为仅使用特定类型而不是任何类型。
你应该关心这个警告吗?可能不是。在大多数情况下,我认为拥有一个可以适用于任何类型的函数比拥有最有效的代码更重要,所以我只是忽略了警告。