2013-01-21 56 views
2

我正在努力一点,以在SML中实现嵌套的if else表达式。任何人都可以突出其语法。假设有三个条件C1,C2,C3,我需要在C代码中等同于下面的条件。SML中嵌套的“if else”的语法

if (C1) { 
    return true; 
} 
else { 
    if(C2) { 
     return true; 
    } 
    else { 
     if (C3) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
} 

我尝试以下,但其作为 “的话,否则,如果和其他人” 的案件

if C1 then true 
else if C2 then true 
else if C3 then true 
else false 
+1

“它当成‘如果,否则,如果和其他人’的案件”你是什么意思?你的C代码是“if,else if,else”。 – sepp2k

回答

8

你是正确的处理。两个代码片段是等价的。

带着几分压痕,您的SML例子看起来更像是在使用嵌套if/else

if C1 then true 
else 
    if C2 then true 
    else 
     if C3 then true 
     else false 

你也可以使用括号使SML例子看起来几乎同C的例子,但它是没有必要的。

当然,在同级中最惯用的方式就是写

C1 orelse C2 orelse C3 

你可以使用同样的技巧为你的C代码。请记住,返回true/false中的if/else块是代码异味。

2

我同意使用orelse是去这里的正确途径,但是作为您想要对更复杂组合进行操作的情况的替代方案,模式匹配可以帮助您。

fun funtrue (false,false,false) = false 
    | funtrue _     = true 

或case语句

case (C1,C2,C3) of 
    (false,false,false) => false 
    | _     => true