実行したいコードが2つあります。どちらも条件付きです
if Value1 < N do something
else if Value1 >= N do something
if Value2 < N do something
else if Value2 >= N do something
それぞれのステートメントを1つずつ実行したいと思います。
Ifはerlangでどのように機能しますか?他にはありません。複数のガードを使用していますが、4つのifステートメントがあるようです。 2人のグループで。
if some condition
code;
if other condition
code
end.
構文エラーが発生します。
if
の形式は次のとおりです。
if
<guard 1> -> <body1> ;
<guard 2> -> <body2> ;
...
end
成功するテストに到達するまで、トップダウンの順序(これは定義されています)でif句のガードを試行して動作します。その後、その句の本体が評価され、if
式が最後の値を返します。身体の表現。したがって、他の言語のelse
ビットが組み込まれています。いずれの警備員も成功しない場合は、if_clause
エラーが生成されます。一般的なキャッチオールガードはtrue
であり、常に成功しますが、キャッチオールガードは真であるものであれば何でもかまいません。
case
の形式は次のとおりです。
case <expr> of
<pat 1> -> <body1> ;
<pat 2> -> <body2> ;
...
end
これは、最初にその値を評価し、次にケース句のパターンとop-down順(これは定義されています)で一致するまで照合しようとすることで機能します。次に、その句の本体が評価され、case
式が実行されます。本文の最後の式の値を返します。一致するパターンがない場合は、case_clause
エラーが生成されます。
if
とcase
は両方とも式(すべてが式)であるため、両方とも値を返す必要があることに注意してください。これが、成功/一致するものがない場合にデフォルト値がない理由の1つです。また、すべてのオプションをカバーするように強制します。これはcase
にとって特に重要です。 if
はcase
の縮退したケースであるため、それを継承しました。 Erlangの理論的根拠にはif
の歴史が少しあります。これは、trapexit.orgのユーザーの貢献の下にあります。
Erlangでは、if
ステートメントオプションなしでtrue
を使用することはできません。これが本当のステートメントであるか実際のtrue
であるかどうかはあなた次第ですが、他の言語ではtrue
をelse
にするのが一般的です。
if
some_condition -> some_code;
some_other_condition -> some_other_code;
true -> else_code
end.
「もしも」を参照してください。詳細については、 this ページのセクションをご覧ください。
Erlangのif
には返す値があり、それは式であることを忘れないでください。 CやJavaのようにif
するのはnotではありません。
値に対して何かを実行したい場合、コードは次のようになります。
if
% do something and get the value
X >= Val -> Something;
% for doing something otherwise and get the value
true -> Else_than_the_Something
end.
詳細については、 Erlangリファレンスマニュアルのif
式のセクション を参照してください。
まず、 'if'条件がガード式に制限されているため、 'case'ステートメントの使用に慣れることをお勧めします。
case custom_call(A) of
1 -> do1(A);
2 -> do2(A)
end.
R13以降で機能する「if」と「case」以外に条件付き実行を行う方法がもう1つあります。
1> N =10.
10
2> ((N > 10) andalso more).
false
3> ((N == 10) andalso equals).
equals