3

SMLでネストされたifelse式を実装するのに少し苦労しています。誰でもその構文を強調できますか?3つの条件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
4

2 に答える 2

11

あなたは正しいです。2 つのコード フラグメントは同等です。

少しインデントすると、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はコードの匂いであることを忘れないでください。

于 2013-01-21T19:41:54.113 に答える
3

使用することがここに行く正しい方法であることに同意しorelseますが、より複雑な組み合わせで行動したい状況の代わりとして、パターンマッチングが役立つでしょう。

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

またはケースステートメントとして

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