ML中的警告

roo*_*kie 29 sml smlnj

有人可以解释一下,这个警告意味着什么?

stdIn:18.35 Warning: calling polyEqual
Run Code Online (Sandbox Code Playgroud)

为什么我在下面的陈述中有"a而不是a":

val alreadyVisited = fn : ''a * ''a list -> bool
Run Code Online (Sandbox Code Playgroud)

这是功能:

fun alreadyVisited(v, []) = false
    | alreadyVisited(v, x::xs) = if(x=v) then true
        else alreadyVisited(v, xs);
Run Code Online (Sandbox Code Playgroud)

提前致谢

sep*_*p2k 47

'a意思是"任何类型",而''a意思是"任何可以比较平等的类型".由于你的alreadyVisited函数比较xv使用=,x并且v需要有一个支持比较它们的类型是否相等,所以你得到了类型''a.

警告意味着您将两个值与多态类型进行比较以获得相等性.

为什么这会产生警告?因为它比比较已知类型的两个值的效率低.

你怎么摆脱这个警告?通过将您的功能更改为仅使用特定类型而不是任何类型.

你应该关心这个警告吗?可能不是.在大多数情况下,我认为拥有一个可以适用于任何类型的函数比拥有最有效的代码更重要,所以我只是忽略了警告.