Next: Range expressions, Previous: Aggregate functions, Up: Expressions [Contents][Index]

Relational expressions ( <`rel_expr`>s) compare
two arithmetic expressions (see Arithmetic
expressions) or test an arithmetic expression for a property. A
relational expression can be either TRUE or
FALSE.

coNCePTuaL supports a variety of relational expressions. The following is the language’s order of operations from highest to lowest precedence:

unary/ binary/ |
```
IS
EVEN
``` , ```
IS
ODD
``` ‘ =’, ‘<’, ‘>’,
‘<=’, ‘>=’,
‘<>’, `DIVIDES` , `IS IN` , `IS NOT IN` |

conjunctive | ‘/\’ |

disjunctive | ‘\/’ |

In addition, as in most programming languages, parentheses can be used to group subexpressions.

The unary relation `IS EVEN`

is TRUE
if a given arithmetic expression represents an even number and the
unary relation
`IS ODD`

is TRUE if a given arithmetic
expression represents an odd number. For example,
‘`456 IS EVEN`’ is
TRUE and
‘`64 MOD 6 IS ODD`’ is
FALSE.

The coNCePTuaL operators ‘`=`’, ‘`<`’,
‘`>`’, ‘`<=`’, ‘`>=`’,
and ‘`<>`’ represent, respectively, the
mathematical relations *=*, *<*, *>*,
*<=*, *>=*, and *<>*
(i.e., not equal). These are all binary
relations that operate on arithmetic expressions (see Arithmetic
expressions). For example, ‘`2+2 = 4`’
is TRUE and
‘`2**3 > 2**4`’ is
FALSE. The `DIVIDES`

relation is
TRUE if the first expression evenly divides the
second, i.e., that *e2 = 0 (mod e1)*.
Hence, ‘`2 DIVIDES 1234`’ (equivalent to
‘`1234 MOD 2 = 0`’) is
TRUE while ‘`2 DIVIDES 4321`’ (equivalent
to ‘`4321 MOD 2 = 0`’)
is FALSE.

The binary relation `IS IN`

has the form

<expr> `IS IN` <range> [`,`
<range>]* |

A
<`range`> represents a range expression. Range
expressions are described in Range expressions.
In short, a range expression specifies a list of values by explicit
enumeration, numeric progression, or predicated combinations of
other range expressions. As an example, the relational expression
‘`x IS
IN {1, ..., 5}`’ is
TRUE if and only if

`IS IN`

{0}, {1, 2, 4, ..., num_tasks*2}The complementary operation to `IS IN`

is the binary relation
```
IS
NOT IN
```

. Hence, ‘`4 IS NOT IN {3, ..., 5}
`’ is FALSE while ‘`6 IS NOT
IN {3, ..., 5}`’ is
TRUE.

Conjunction (*``and''*) and
disjunction (*``or''*) combine multiple
relational expressions. <`rel_expr`> ‘`/\`’
<`rel_expr`> is
TRUE if and only if both
<`rel_expr`>s are TRUE, and
<`rel_expr`> ‘`\/`’
<`rel_expr`> is
TRUE if and only if either
<`rel_expr`> is TRUE. For example,
‘`456 IS EVEN \/ 2**3 > 2**4`’ is TRUE
and ‘`456 IS EVEN /\ 2**3 > 2**4`’ is
FALSE. Conjunction and disjunction are both
short-circuiting operations. Evaluation proceeds left-to-right.
Expressions such as ‘`x<>0 /\ 1/x=1`’ will
therefore not result in a divide-by-zero error.

coNCePTuaL does not currently have a logical negation operator.

• Formal grammar for relational expressions: | EBNF version of the preceding prose |

Next: Range expressions, Previous: Aggregate functions, Up: Expressions [Contents][Index]