我在SML中实现了一个嵌套的if else表达式。任何人都可以突出其语法。假设有三个条件C1,C2,C3我需要在C代码中等效以下。
if (C1) {
return true;
}
else {
if(C2) {
return true;
}
else {
if (C3) {
return true;
}
else {
return false;
}
}
}
我尝试了以下内容,但将其视为“if,else if和else”案例
if C1 then true
else if C2 then true
else if C3 then true
else false
答案 0 :(得分:8)
你是对的。两个代码片段是等效的。
通过一些缩进,您的SML示例看起来更像是使用嵌套的if/else
:
if C1 then true
else
if C2 then true
else
if C3 then true
else false
您也可以使用括号,以便SML示例看起来与C示例几乎相同,但不是必需的。
当然,SML中最惯用的方式是编写
C1 orelse C2 orelse C3
您可以对C代码使用相同的技巧。请记住,在true/false
块中返回if/else
是代码味道。
答案 1 :(得分:2)
我同意使用orelse
是正确的方式,但作为您想要对更复杂的组合采取行动的情况的替代方案,模式匹配可以帮助您。
fun funtrue (false,false,false) = false
| funtrue _ = true
或作为案例陈述
case (C1,C2,C3) of
(false,false,false) => false
| _ => true