## Выражения: Функции

Функции в общем случае могут иметь произвольное число аргументов, которые записываются после имени функции в скобках через запятую.

По числу аргументов функции разбиваются на 4 группы:

- Функции с фиксированным числом аргументов (sqrt, sin, exp, mod).
- Функции с необязательными аргументами (log, rand, setbit).
- Функции с произвольным числом аргументов (min, if, steps, xor).
- Функции без аргументов (now(), rand()).

Для функций без аргументов пустые скобки обязательны.

Ниже приводится полный перечень допустимых функций с их спецификациями и описаниями. Спецификации указывают типы всех аргументов и возвращаемого значения.

Спецификации приводятся в виде

    имя_функции (типы_входных_аргументов): тип_значения

Необязательные аргументы заключаются в квадратные скобки [ ]. Аргументы, которые могут повторяться более одного раза, заключаются в фигурные скобки { }. Слово any означает, что аргумент может иметь произвольный тип.

### Выражения: Функции преобразования типов

#### Bool (any): bool

преобразование any в логический тип

#### Int (any): int

преобразование any в целый тип

#### Real (any): real

преобразование any в вещественный тип

#### String (any): string

преобразование any в строковой тип

#### Datetime (any): datetime

преобразование any в дату и время

### Выражения: Функции проверки значений

#### IsEmpty (any): bool

TRUE если any пустое или ошибочное

#### IsNumber (any): bool

TRUE если any приводимо к типу real

#### IsTime (any): bool

TRUE если any приводимо к datetime

### Выражения: Числовые функции с фиксированным числом аргументов

#### Abs (real): real

абсолютная величина (модуль) числа real

#### Sign (real): int

сигнум числа real, принимает значения: -1 при real<0; 0 при real=0; 1 при real>0

#### Max ({real}): real

максимум чисел

#### Min ({real}): real

минимум чисел

#### Sqrt (real): real

квадратный корень числа real

#### Sin (real): real

синус числа real

#### Cos (real): real

косинус числа real

#### Tg (real): real

тангенс числа real

#### Arcsin (real): real

арксинус числа real

#### Arccos (real): real

арккосинус числа real

#### Arctg (real): real

арктангенс числа real

#### Sh (real): real

гиперболический синус числа real

#### Ch (real): real

гиперболический косинус числа real

#### Th (real): real

гиперболический тангенс числа real

#### Exp (real): real

экспонента числа real

#### Log (real, [real2]): real

логарифм real1 по основанию real2, либо натуральный, если real2 опущен

#### FNorm (real, [real1], [real2]): real

функция нормального распределения с МО=real1 и СКО=real2. Если real2 опущено, полагается МО=0, СКО= real1. Если real1 и real2 опущены, полагается МО=0, СКО=1.

#### rand ([real1], [real2]): real

случайное число из диапазона [real1,real2), [0,real1) или [0,1)

#### round (real): real

округление до ближайшего целого

#### upround (real): real

ближайшее большее или равное целое (потолок)

#### dnround (real): real

ближайшее меньшее или равное целое (пол)

### Выражения: Логические функции

#### Xor (bool, {bool}): bool

логическое исключающее ИЛИ

### Выражения: Битовые функции для целых чисел

#### Bit (int1, int2): bool

int2-ый бит в целом числе int1

#### SetBit (int1, [int2], [bool]): int

установить int1-ый бит числа int2 (0 если опущен) в bool (1 если опущен)

#### NotBit (int): int

побитовое отрицание

#### OrBit (int, {int}): int

побитовое ИЛИ

#### AndBit (int, {int}): int

побитовое И

#### XorBit (int, {int}): int

побитовое исключающее ИЛИ

### Выражения: Функции для работы с датой и временем

#### now ( ): datetime

текущая дата-время

#### time (any): datetime

преобразование any в datetime с выделением времени

#### date (any): datetime

преобразование any в datetime с выделением даты

#### year (datetime): int

выделение года из datetime

#### month (datetime): int

номер месяца в году, нумерация с 1

#### day (datetime): int

номер для в месяце, нумерация с 1

#### hours (datetime): int

выделение часов с полуночи из datetime

#### minutes (datetime): int

выделение минут из datetime

#### seconds (datetime): int

выделение секунд из datetime

#### WeekDay (datetime): int

номер дня недели, ВС=0, ПН=1, ..., СБ=6

#### WeekDayRus (datetime): int

номер дня недели, ПН=1, ..., СБ=6, ВС=7

#### YearDay (datetime): int

номер дня в году

### Выражения: Функции для работы со строками

#### len (string): int

длина строки

#### pos (string1, string2): string

позиция строки string2 в строке string1, или (-1) если не найдена; нумерация символов строки начинается с 0

#### left (string, int): string

головная часть строки длиной int

#### right (string, int): string

хвост строки длиной int

#### mid (string, int1, int2): string

средняя часть строки начиная с позиции int1 длиной int2, нумерация с 0

#### format (string, any): string

форматный вывод any согласно спецификации, заданной в string

### Выражения: Условные и пороговые функции

#### if ({bool1, any1}, [anyLast]): any

условное выражение, возвращает:
any1, если bool1=TRUE,
any2, если bool2=TRUE,
... и так далее ... ,
anyLast, если все нечётные аргументы равны FALSE.

#### steps (real1, {real}): int

ступенчатая функция, возвращает:
0, если real1<real2,
1, если real2<=real1<real3,
2, если real3<=real1<real4,
... и так далее ...

#### switch (any, {any1, any2} [anyLast]): any

переключатель значений, возвращает:
any2, если any=any1,
any4, если any=any3,
... и так далее...
anyLast, если все равенства не верны.