Next: , Previous: , Up: Expressions   [Contents][Index]

#### 4.2.5 Relational expressions

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

 `IS IN` [`,` ]*

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.

Next: , Previous: , Up: Expressions   [Contents][Index]

Scott Pakin, pakin@lanl.gov