警告:调用 polyEqual

发布于 2024-10-05 07:39:06 字数 360 浏览 8 评论 0 原文

有人可以解释一下,这个警告是什么意思吗?

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);

Can somebody please explain, what does this warning means?

stdIn:18.35 Warning: calling polyEqual

and why do I have "a and not 'a in the following statement:

val alreadyVisited = fn : ''a * ''a list -> bool

this is my function:

fun alreadyVisited(v, []) = false
    | alreadyVisited(v, x::xs) = if(x=v) then true
        else alreadyVisited(v, xs);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

歌枕肩 2024-10-12 07:39:06

'a 表示“任何类型”,而 ''a 表示“可以比较相等性的任何类型”。由于您的 alreadyVisited 函数使用 =xxv >v 需要有一个支持比较它们是否相等的类型,因此您会得到类型 ''a

该警告意味着您正在比较两个具有多态类型的值是否相等。

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

你如何摆脱警告?通过将您的函数更改为仅适用于特定类型而不是任何类型。

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

'a means "any type", while ''a means "any type that can be compared for equality". Since your alreadyVisited function compared x and v using =, x and v need to have a type that supports comparing them for equality, so you get the type ''a.

The warning means that you're comparing two values with polymorphic type for equality.

Why does this produce a warning? Because it's less efficient than comparing two values of known types for equality.

How do you get rid of the warning? By changing your function to only work with a specific type instead of any type.

Should you care about the warning? Probably not. In most cases I would argue that having a function that can work for any type is more important than having the most efficient code possible, so I'd just ignore the warning.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文