web-dev-qa-db-ja.com

他の場合と同等のErlang

実行したいコードが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.

構文エラーが発生します。

14
system

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エラーが生成されます。

ifcaseは両方とも式(すべてが式)であるため、両方とも値を返す必要があることに注意してください。これが、成功/一致するものがない場合にデフォルト値がない理由の1つです。また、すべてのオプションをカバーするように強制します。これはcaseにとって特に重要です。 ifcaseの縮退したケースであるため、それを継承しました。 Erlangの理論的根拠にはifの歴史が少しあります。これは、trapexit.orgのユーザーの貢献の下にあります。

23
rvirding

Erlangでは、ifステートメントオプションなしでtrueを使用することはできません。これが本当のステートメントであるか実際のtrueであるかどうかはあなた次第ですが、他の言語ではtrueelseにするのが一般的です。

if 
    some_condition -> some_code;
    some_other_condition -> some_other_code;
    true -> else_code
end.

「もしも​​」を参照してください。詳細については、 this ページのセクションをご覧ください。

13
Reese Moore

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式のセクション を参照してください。

6
jj1bdx

まず、 '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
5
probsolver