嵌套的语法;如有其他",;在SML中

嵌套的语法;如有其他",;在SML中,sml,smlnj,Sml,Smlnj,我正在努力实现SML中的嵌套if-else表达式。任何人都可以突出显示它的语法。假设有三个条件C1,C2,C3,我需要在C代码中等价于下面的条件 if (C1) { return true; } else { if(C2) { return true; } else { if (C3) { return true; } else { retu

我正在努力实现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,and else”案例

你说得对。两个代码片段是等价的

通过一点缩进,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代码使用相同的技巧。请记住,在
if/else
块中返回
true/false
是代码气味。

我同意使用
orelse
是正确的方法,但作为对更复杂的组合进行操作的替代方法,模式匹配将能够帮助您

fun funtrue (false,false,false) = false
  | funtrue _                   = true
或者作为案例陈述

case (C1,C2,C3) of
     (false,false,false) => false
  |  _                   => true
它被视为“如果,如果,如果,和其他”案例。你这是什么意思?您的C代码也是“if,else if,else”。
case (C1,C2,C3) of
     (false,false,false) => false
  |  _                   => true