SML - 如果条件有一些“或”

时间:2011-05-29 18:01:57

标签: sml

我想制作一个像这样的if条件:

if

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

函数头返回'a;

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

有什么问题?谢谢。

3 个答案:

答案 0 :(得分:7)

我认为它在SML中被称为orelse

答案 1 :(得分:5)

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

  

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

答案 2 :(得分:1)

对于此示例,您还可以编写:

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