Home »

Resources » Here

This page lists the operators supported by Envision.

## Generic operators

The following operators are supported by all types:

`==`

: equality (case-sensitive when comparing text)`!=`

: inequality (case-sensitive when comparing text)`<`

: less than`>`

: greater than`<=`

: less than or equal to`>=`

: greater than or equal to`~~`

: case-insensitive and accentuation-insensitive equality (restricted to text comparison)`!~`

: inequality reversing `~~`

Ordering of values is the same for all Envision constructs (such as

`order by`

,

`rank`

or

`median`

):

- numbers are sorted in ascending order
- dates are sorted in chronological order
`false < true`

- text values are sorted in alphabetical order (specifically, by Unicode code points)

## Numeric operators

The following numeric operators are supported:

`+`

: addition`-`

: subtraction`*`

: multiplication`/`

: division`/.`

: division hardened against division by zero, `a /. b`

is equivalent of `a / max(1, b)`

`mod`

: remainder of the integral division`^`

: power

Some numeric operators can be used for dates:

`date - date`

is the number of days between two dates`date + number`

and `date - number`

adds or subtracts days to a date

## Logical operators

The following logical operators are supported:

`&`

: logical AND`|`

: logical OR`not`

: logical NOT`c ? a : b`

: the conditional operator, also referred as the *ternary if*. Note that `a`

, `b`

and `c`

are first evaluated separately.

## Distribution operators

Distributions benefit from specific operators (see also

algebra of distributions):

`+`

: point-wise addition`-`

: point-wise subtraction`*`

: point-wise multiplication`<<`

: left shift`>>`

: right shift

### Random variable operators

When distributions happen to be random variables (mass is equal to 1, no negative values), they benefit from specific operators:

`+*`

: additive convolution`-^`

: subtractive convolution`**`

: multiplicative convolution (Dirichlet convolution)`^*`

: convolution power

## Operator precedence

The operators below are listed in increasing order of precedence. For instance, since

`&`

is before

`|`

, then

`A | B & C`

is interpreted as

`A | (B & C)`

. Operators with the same precedence are grouped left-to-right:

`A * B / C`

is

`(A * B) / C`

.

`^`

, `^*`

, `>>`

, `<<`

`*`

, `/`

, `/.`

and `mod`

`-`

, `+`

, `+*`

, `-*`

, `**`

`<`

, `<=`

, `==`

, `!=`

, `~~`

, `!~`

, `>`

, `>=`

, `~~`

and `!~`

`not`

`&`

`|`