論理式は、比較などブール式の結果を組み合わせることで複雑な条件式を構成します。
<logical_expr>
の形式は次のとおりです。
<logical_operand> or <logical_operand> -- true if either operandis true
<logical_operand> and <logical_operand> -- true if both operands are true
[ not ] <logical_operand>-- true if operand is false
ここで、<logical_operand>
は次のいずれかです。
<operand>
<compare_expr>
<function_call>
<logical_expr>
論理演算子の演算はブール値でだけ行われます。したがって、<logical_operand>
はすべて true
または false
になります。
例:
a > 0 and a < n + 1 not x and y a and b or c and d and not e
数値演算式の場合、<logical_expr>
は再帰的定義です。つまり、論理オペランドが別の論理式になることがあります。
また、論理式には任意の順番で and
、or
、not
を含めることができ、評価の順序は以下の優先順位(優先順位の高い順)で定義されます。
not -- right associative
and -- left associative
or -- left associative
つまり、カッコで囲まれていない論理式では、not
は and
の前に評価され、and は or
の前に評価されます。
論理演算子の優先順位は、比較演算子、数値演算、関数呼び出しなどの優先順位よりも低いため、これらの演算は常に規則どおり論理演算子の前に評価されます。
上の例は以下の順序で評価されます。
(a > 0) and (a < (n + 1)) (not x) and y (a and b) or ((c and d) and (not e))