論理式

論理式は、比較などブール式の結果を組み合わせることで複雑な条件式を構成します。

<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))

関連事項