SML中嵌套“if else”的语法

时间:2013-01-21 19:37:24

标签: sml smlnj

我在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

2 个答案:

答案 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