Next: Built-in functions, Previous: Expressions, Up: Expressions [Contents][Index]
coNCePTuaL supports a variety of arithmetic expressions. The following is the language’s order of operations from highest to lowest precedence:
In addition, as in most programming languages, parentheses can be used to group subexpressions.
The ‘&’ (“and”),
‘|’ (“or”), XOR
, and NOT
operators
perform bitwise, not logical, operations. That is, they accept
numerical arguments, not truth-value arguments. Hence, for example,
‘3 | 5’ is equal
to ‘7’.
‘<<’ and
‘>>’ are bit-shift operators. That
is, ‘a << b’ is the coNCePTuaL
equivalent of the mathematical expression a * 2^b and
‘a >> b’ is the coNCePTuaL
equivalent of the mathematical expression a / 2^b.
Consequently, negative values of b are valid and
correspond to a shift in the opposite direction. (In contrast, C
and Perl treat a negative shift amount as a—usually
large—unsigned number and Python raises a ValueError
exception on negative shifts.)
MOD
is a modulo (i.e., remainder)
operator: ‘10 MOD 3’ returns
‘1’. ‘MOD’ is
guaranteed to return a nonnegative remainder. Hence,
‘16 MOD 7’ and ‘16 MOD
-7’ both return ‘2’ even
though ‘-5’ is also mathematically valid.
Similarly, ‘-16 MOD 7’ and
‘-16 MOD -7’ both return
‘5’ even though
‘-2’ is also mathematically valid.
The function calls allowed in ‘ <function>( <expr>, …)’ are listed and described in Built-in functions. All functions take one or more arithmetic expressions as an argument. The operator ‘*’ represents multiplication; ‘/’ represents division; and ‘**’ represents exponentiation (i.e., ‘x ** y’ == x^y, rounded towards zero). Note that 0^y generates a run-time error for y <= 0.
A conditional expression ‘ <expr1> IF
<rel_expr>
OTHERWISE
<expr2>’ evaluates to <expr1> if
the relational expression <rel_expr> evaluates
to TRUE and <expr2> if
<rel_expr> evaluates to
FALSE.^{12} Relational expressions are described in
Relational
expressions. As some examples of conditional expressions,
‘666 IF 2+2=5 OTHERWISE 777’ returns
‘777’ while ‘666 IF 2+2=4
OTHERWISE 777’ returns
‘666’.
All operations proceed left-to-right except power and conditional expressions, which proceed right-to-left. That is, ‘4-3-2’ means (4-3)-2 but ‘4**3**2’ means 4^(3^2). Similarly, ‘2 IF p=0 OTHERWISE 1 IF p=1 OTHERWISE 0’ associates like ‘2 IF p=0 OTHERWISE (1 IF p=1 OTHERWISE 0)’, not like ‘(2 IF p=0 OTHERWISE 1) IF p=1 OTHERWISE 0’.
• Evaluation contexts: | Integer context vs. floating-point context | |
• Formal grammar for arithmetic expressions: | EBNF version of the preceding prose |
It is therefore analogous to ‘ <rel_expr> ? <expr1> : <expr2>’ in the C programming language.
Next: Built-in functions, Previous: Expressions, Up: Expressions [Contents][Index]