SML - if 条件带有一些“或”

发布于 2024-11-10 20:05:10 字数 285 浏览 1 评论 0原文

我想创建一个这样的 if 条件:

if

 ((head(c) = 1) or (head(c) = ~1) or (head(c) = ~5) or (head(c) = ~17) or (head(c) = 0))
count +1
else..

函数头 return 'a;

它给了我下一个错误:operator is not a function [tycon dismatch] 运算符:布尔 表达中

有什么问题?谢谢。

I want to make a if condition like this:

if

 ((head(c) = 1) or (head(c) = ~1) or (head(c) = ~5) or (head(c) = ~17) or (head(c) = 0))
count +1
else..

the function head return 'a;

It gives me the next error: operator is not a function [tycon dismatch]
operator: bool
in expression

What is the problem? thank you.

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

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

发布评论

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

评论(3

能怎样 2024-11-17 20:05:10

我认为它在 SML 中被称为orelse

I think it's called orelse in SML.

不忘初心 2024-11-17 20:05:10

它被称为orelse,不仅仅是orandalso而不是and。但orelseandalso 不是函数。引自标准 ML '97 中的编程

特别注意 andalso 和 orelse 不是中缀函数,因为它们的第二个参数并不严格 - 也就是说,它们并不总是强制计算第二个参数 - 并且此类函数不能用严格的编程语言定义例如标准机器学习。因此我们不能将 op 关键字应用于 andalso 或 orelse。

It's called orelse, not just or and andalso instead of and. But orelse and andalso are not functions. Citation from Programming in Standard ML '97:

Note in particular that andalso and orelse are not infix functions because they are not strict in their second argument—that is, they do not always force the evaluation of their second argument—and such functions cannot be defined in a strict programming language such as Standard ML. Thus we cannot apply the op keyword to andalso or orelse.

简单爱 2024-11-17 20:05:10

对于这个例子,你也可以这样写:

let val h = head c in
if List.exists (fn x => x = h) [1, ~1, ~5, ~17, 0]
then count + 1
else ...
end

For this example, you could also write:

let val h = head c in
if List.exists (fn x => x = h) [1, ~1, ~5, ~17, 0]
then count + 1
else ...
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文