# Operators

The following are the set of built-in unary, binary and conditional operators

## Unary operators

The operator `not`

provides the boolean negation, e.g. `not true`

is `false`

.

The operator `-`

provides the negative of a number, e.g. `-(-1)`

is `1`

.

## Binary operators

The binary operators are:

`+`

is the addition operator for numbers. It can also be used to concatenate strings.`-`

is the subtraction operator for numbers.`*`

is the mutiplication operator for numbers.`/`

is the division operator for numbers. It can return an error when dividing a number by zero.`%`

is the mod operator for numbers.`==`

is the equality operator and can be used for numbers, strings, and temporal types, e.g.`2 == 2`

is`true`

.`<=`

is the less or equal to operator and can be used for numbers, strings, and temporal types.`<`

is the less operator and can be used for numbers, strings, and temporal types.`>=`

is the greater or equal to operator and can be used for numbers, strings, and temporal types.`>`

is the greater operator and can be used for numbers, strings, and temporal types.

Strings are compared lexicographically.

Temporal types must be of the same type: e.g. a date can only be compared to another date type, and not to a time or timestamp type.

`and`

is the logical and boolean operator, e.g.`true and false`

is`false`

.`or`

is the logical or boolean operator, e.g.`true or false`

is`true`

.

## Conditional operators

To check for a condition use `if <condition> then <exp1> else <exp2>`

.

For example:

`if (true) then "1" else "2"`

Note that both the expressions in `then`

and in `else`

must be of the two compatible types. For instance

`if (true) then 1 else 2f`

The following is an expression of type float: even though `then`

is `1`

which has type int, the `else`

is `2f`

which has type `float`

. Since an `int`

can be upcasted to a `float`

, then the result type is `float`

.