3

我正在努力在 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 C1 then true
else if C2 then true
else if C3 then true
else false
4

2 回答 2

11

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

稍加缩进,您的 SML 示例看起来更像是使用 nested 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/falseif/else块中返回是代码异味。

于 2013-01-21T19:41:54.113 回答
3

我同意 usingorelse是正确的方法,但作为您想要对更复杂组合采取行动的情况的替代方案,模式匹配将能够为您提供帮助。

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

或作为案例陈述

case (C1,C2,C3) of
     (false,false,false) => false
  |  _                   => true
于 2013-01-22T11:13:33.793 回答