10

の意味は何ですか

x AND THEN y AND z

それは...ですか

x AND THEN (y AND z)

(y、xがFALSEの場合、zは評価されません)または

(x AND THEN y) AND z

(xがFALSEの場合、yはスキップされますが、zが評価される可能性があります)。

4

4 に答える 4

5

@oenoneのコメントは、GNATが拒否することを示していますが、そのx AND THEN y AND z理由は説明していません。ある意味でそれは真実であり、同じ優先順位andand then持っていますが、それがすべてではありません。

式の文法は次のとおりです。

expression ::=
  relation {and relation}  | relation {and then relation}
  | relation {or relation} | relation {or else relation}
  | relation {xor relation}

ここで、{ FOO }は0回以上の出現を示しますFOO

この文法は、これらの演算子または制御フォームのいずれかを1つの式(X and Y and ZA and then B and then C)にチェーンできるように特別に設計されていますが、それらを混在させることはできません。したがって、質問の表現x AND THEN y AND zは違法であり、それが何を意味するのかという質問は発生しません。このルールのポイントは、このような場合の混乱を避けることです。

あなたはただ書く(X and then Y) and ZX and then (Y and Z)、あなたがやりたいことに一致する方を書く必要があります。

and同じことがミキシングにも当てはまりますor

    X and Y and Z  -- legal
    X and Y or  Z  -- ILLEGAL
    (X and Y) or Z -- legal
    X and (Y or Z) -- legal
于 2011-08-02T15:47:39.793 に答える
4

短絡演算子は、厳密なバージョンと同じ優先順位を持ちます。

于 2011-06-05T20:15:27.477 に答える
3

Mrab&Ira&trashが同等のペースを持っていると言っているように、しかし明示的に指摘されていないのは、「and then」&「orelse」演算子は結果ができるとすぐに式を返す(終了評価)ということです決定されます。

例(擬似コード):

if Almost_always_true_fn() or else costly_fn() then 
  do_stuff;
end if;

ほとんどの場合、最初の関数(Almost_always_true_fn)のみが評価され、それがfalseを返した場合にのみcostly_fnが実行されます。

これを:と比較してください

if Almost_always_true_fn() or costly_fn() then 
  do_stuff;
end if;

この場合、Almost_always_true_fn()costly_fn()の両方が評価されます。

NWS。

于 2011-06-06T08:39:44.257 に答える
3

はい、(x AND THEN y) AND zでは、関係 zは常に評価されます。

于 2011-06-06T15:04:05.633 に答える