## Built-in operators

This page describes the built-in operators:

- not

- and

- or

- + (unary)

- - (unary)

- + (binary)

- - (binary)

- *

- /

- div

- mod

- <

- <=

- >

- >=

- ==

- !=

The signatures of the operators are given using tool headers, to show the name of the operator, the types of the arguments, and the type of the resulting value. Operators however, can not be used by means of tool invocations. Operators with one argument are put directly before the argument (e.g. `not true`, `-5`), while operators with two arguments are put between the arguments (e.g. `true and false`, `1 + 3`).

### not operator

    tool bool not(bool arg)

Returns the logical inverse of a boolean value.

Arguments

`arg`

  The boolean value.

Returns

The logical inverse result.

### and operator

    tool bool  and(bool left, bool right)
    tool set T and<T>(set T left, set T right)

Returns the conjunction of two boolean values, or the intersection of two sets. For boolean values, the operator uses short circuit evaluation. That is, the `right` argument is only evaluated if necessary, i.e. only if the `left` argument evaluates to `true`.

Type parameters

`T`

  The type of the elements of the set.

Arguments

`left`

  The first boolean value or set.

`right`

  The second boolean value or set.

Returns

The conjunction or intersection result.

### or operator

    tool bool  or(bool left, bool right)
    tool set T or<T>(set T left, set T right)

Returns the disjunction of two boolean values, or the union of two sets. For boolean values, the operator uses short circuit evaluation. That is, the `right` argument is only evaluated if necessary, i.e. only if the `left` argument evaluates to `false`.

Type parameters

`T`

  The type of the elements of the set.

Arguments

`left`

  The first boolean value or set.

`right`

  The second boolean value or set.

Returns

The disjunction or union result.

### + operator (unary)

    tool int    +(int arg)
    tool long   +(long arg)
    tool double +(double arg)

Returns the unary plus of an integer, long, or double value. This is essentially the identity function.

Arguments

`arg`

  The integer, long, or double value.

Returns

The integer, long, or double value.

### + operator (binary)

    tool int      +(int left, int right)
    tool long     +(long left, long right)
    tool double   +(double left, double right)
    tool string   +(string left, string right)
    tool list T   +<T>(list T left, list T right)
    tool map(K:V) +<K, V>(map(K:V) left, map(K:V) right)

Returns the addition of two integer, long, or double numbers, the concatenation of two strings or lists, or the update of a first map with the entries of a second map. For two maps, essentially, the entries of the first map are overwritten by the entries of the second map, while entries for new keys are added.

Type parameters

`T`

  The type of the elements of the list.

`K`

  The type of the keys of the map.

`V`

  The type of the values of the map.

Arguments

`left`

  The first integer, long, or double number, string, list, or map.

`right`

  The second integer, long, or double number, string, list, or map.

Returns

The addition, concatenation, or map update result.

Runtime errors

- If the operation results in overflow (for integer, long, and double numbers only).

### - operator (unary)

    tool int    -(int arg)
    tool long   -(long arg)
    tool double -(double arg)

Returns the negation of an integer, long, or double value.

Arguments

`arg`

  The integer, long, or double value.

Returns

The negation result.

Runtime errors

- If the operation results in overflow.

### - operator (binary)

    tool int      -(int left, int right)
    tool long     -(long left, long right)
    tool double   -(double left, double right)
    tool set T    -<T>(set T left, set T right)
    tool map(K:V) -<K, V>(map(K:V) left, list K right)
    tool map(K:V) -<K, V>(map(K:V) left, set K right)
    tool map(K:V) -<K, V, V2>(map(K:V) left, map(K:V2) right)

Returns the subtraction of two integer, long, or double numbers, the set difference of two sets, the map with the keys from the list removed from it, the map with the keys from the set removed from it, or the first map with the keys from the second map removed from it.

Type parameters

`T`

  The type of the elements of the list.

`K`

  The type of the keys of the map.

`V`

  The type of the values of the map.

Arguments

`left`

  The first integer, long, or double number, the first set, or the (first) map.

`right`

  The second integer, long, or double number, the (second) set, the list, or the second map.

Returns

The subtraction, set difference, or map removal result.

Runtime errors

- If the operation results in overflow (for integer, long, and double numbers only).

### * operator

    tool int    *(int left, int right)
    tool long   *(long left, long right)
    tool double *(double left, double right)

Returns the multiplication of two integer, long, or double numbers.

Arguments

`left`

  The first integer, long, or double number.

`right`

  The second integer, long, or double number.

Returns

The multiplication result.

Runtime errors

- If the operation results in overflow.

### / operator

    tool double /(double left, double right)

Returns the division of two double numbers.

Arguments

`left`

  The first double number.

`right`

  The second double number.

Returns

The division result.

Runtime errors

- If the operation results in overflow or division by zero.

### div operator

    tool int  div(int left, int right)
    tool long div(long left, long right)

Returns the integer division of two integer or long numbers.

Arguments

`left`

  The first integer or long number.

`right`

  The second integer or long number.

Returns

The integer division result.

Runtime errors

- If the operation results in overflow or division by zero.

### mod operator

    tool int  mod(int left, int right)
    tool long mod(long left, long right)

Returns the modulus of two integer or long numbers.

Arguments

`left`

  The first integer or long number.

`right`

  The second integer or long number.

Returns

The modulus result.

Runtime errors

- If the operation results in division by zero.

### < operator

    tool bool <(int left, int right)
    tool bool <(long left, long right)
    tool bool <(double left, double right)

Returns whether the first integer, long, or double number is less than the second integer, long, or double number.

Arguments

`left`

  The first integer, long, or double number.

`right`

  The second integer, long, or double number.

Returns

`true` if the first number is less than the second number, `false` otherwise.

### <= operator

    tool bool <=(int left, int right)
    tool bool <=(long left, long right)
    tool bool <=(double left, double right)

Returns whether the first integer, long, or double number is less than or equal to the second integer, long, or double number.

Arguments

`left`

  The first integer, long, or double number.

`right`

  The second integer, long, or double number.

Returns

`true` if the first number is less than or equal to the second number, `false` otherwise.

### > operator

    tool bool >(int left, int right)
    tool bool >(long left, long right)
    tool bool >(double left, double right)

Returns whether the first integer, long, or double number is greater than the second integer, long, or double number.

Arguments

`left`

  The first integer, long, or double number.

`right`

  The second integer, long, or double number.

Returns

`true` if the first number is greater than the second number, `false` otherwise.

### >= operator

    tool bool >=(int left, int right)
    tool bool >=(long left, long right)
    tool bool >=(double left, double right)

Returns whether the first integer, long, or double number is greater than or equal to the second integer, long, or double number.

Arguments

`left`

  The first integer, long, or double number.

`right`

  The second integer, long, or double number.

Returns

`true` if the first number is greater than or equal to the second number, `false` otherwise.

### == operator

    tool bool ==<T>(T left, T right)

Returns whether the first value is equal to the second value.

Type parameters

`T`

  The type of the values.

Arguments

`left`

  The first value. May be `null`.

`right`

  The second value. May be `null`.

Returns

`true` if the first value is equal to the second value, `false` otherwise.

### != operator

    tool bool !=<T>(T left, T right)

Returns whether the first value is unequal to the second value.

Type parameters

`T`

  The type of the values.

Arguments

`left`

  The first value. May be `null`.

`right`

  The second value. May be `null`.

Returns

`true` if the first value is unequal to the second value, `false` otherwise.