論理式は、比較などブール式の結果を組み合わせることで複雑な条件式を構成します。
<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)) |