## Operators and Predefined Functions¶

The main operators and predefined functions are outlined in the following chapters together with the main data types involved. Here we sketch some operators and functions that are not linked to a specific type. The predefined functions are listed in annex Library.

### Conditional Expression¶

An important operator is the conditional à la C:

          (cond ? exp₁ : exp₂)


returns the value of the expression exp₁ if the expression cond evaluates to true and else exp2. The parentheses are mandatory.

As usual, the conditional operator is a special function: it does not evaluate all of its arguments. If cond is true, only exp₁ is evaluated, and similarly for false and exp₂.

In the body of a function, a conditional can be written using the usual syntax:

      if (cond) { exp₁ } else { exp₂ }


see chapter Functions.

Beware not to confuse the conditional action and the conditionnal expression presented here. The body of the former is a sequence of actions; the latter, an expression. The former does not return a value, contrary to the latter.

### @empty and @size¶

The predicate @empty returns true if its argument is an empty map, tab or string, and false otherwise.

Function @size accepts any kind of argument and returns:

• for aggregate values, the “size” of the arguments; that is, for a map, the number of entries in the dictionary, for a tab the number of elements, for a nim, the dimension of the nim and for a string the number of characters in the string.

• for scalar values, @size returns a strictly negative number. This negative number depends only on the type of the argument, not on the value of the argument.