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 x is one of 1, 2, 3, 4,
or 5. As a more complex example, ‘p*2 IS IN
{0}, {1, 2, 4, ..., num_tasks*2}’ is
TRUE if and only if twice p is either zero
or a power of two less than or equal to twice the number of tasks
being used.
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]