List of operators in Envision

List of operators












Home » Resources » Here

The operators are algebraic primitives powering Envision. Below, we list 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
  • &
  • |