Skip to content

Latest commit

 

History

History
111 lines (110 loc) · 13.4 KB

File metadata and controls

111 lines (110 loc) · 13.4 KB

Рантайм

  • общие функции:
    • nil(): nil — возвращает значение нулевого типа;
    • type(x: any): str — возвращает имя типа переданного значения;
    • ==(x: any, y: any): bool — равенство;
    • !=(x: any, y: any): bool — неравенство;
    • !(x: any): bool — логическое отрицание;
    • &&(x: any, y: any): any — конъюнкция; функция является ленивой — y вычисляется только при необходимости (то есть когда x истинен); возвращается вычисленное значение;
    • ||(x: any, y: any): any — дизъюнкция; функция является ленивой — y вычисляется только при необходимости (то есть когда x ложен); возвращается вычисленное значение;
    • ??(value: any, default: any): any — возвращает value, если оно не равно nil; в противном случае возвращается default;
    • if(condition: bool, true_value: any, false_value: any): any — выбор: если condition истинно, возвращает true_value, иначе — false_value; функция является ленивой — вычисляется только возвращаемое значение;
    • +(x: num|list<any>|hash<any, any>, y: num|list<any>|hash<any, any>): num|list<any>|hash<any, any> — возвращает результат комбинирования переданных аргументов:
      • если оба аргумента имеют тип num, то функция возвращает результат их сложения;
      • если оба аргумента имеют тип list<any>, то функция возвращает результат их конкатенации;
      • если оба аргумента имеют тип hash<any, any>, то функция возвращает результат их слияния;
    • size(x: list<any>|hash<any, any>|pack<any>): num — возвращает размер (длину) переданного аргумента;
    • .(index: any, container: list<any>|hash<any, any>|pack<any>): any — возвращает элемент index из контейнера container:
      • если container имеет тип list<any>, то функция возвращает элемент с индексом index; если индекс отрицателен, он трактуется как номер элемента с конца списка; если индекс выходит за границы списка, то функция возвращает nil;
      • если container имеет тип hash<any, any>, то функция возвращает соответствующее ключу index значение; если указанный ключ отсутствует в хеш-таблице, функция возвращает nil;
      • если container имеет тип pack<any>, то он трактуется как список длиной 1;
  • функции для работы с логическими значениями:
    • false(): bool — возвращает ложное логическое значение (число 0);
    • true(): bool — возвращает истинное логическое значение (число 1);
    • bool(x: any): bool — преобразует значение в логический тип: возвращает строго 0 или 1;
  • функции для работы с числами:
    • <(x: num, y: num): bool — меньше;
    • <=(x: num, y: num): bool — меньше или равно;
    • >(x: num, y: num): bool — больше;
    • >=(x: num, y: num): bool — больше или равно;
    • _(x: num): num — унарный минус;
    • ++(x: num): num — инкремент;
    • --(x: num): num — декремент;
    • -(x: num, y: num): num — вычитание;
    • *(x: num, y: num): num — умножение;
    • /(x: num, y: num): num — деление;
    • %(x: num, y: num): num — остаток от деления;
    • битовые функции:
      • &(x: num, y: num): num — побитовое И;
      • |(x: num, y: num): num — побитовое ИЛИ;
      • ^(x: num, y: num): num — побитовое исключающее ИЛИ;
      • <<(x: num, y: num): num — сдвиг влево;
      • >>(x: num, y: num): num — арифметический сдвиг вправо;
      • >>>(x: num, y: num): num — логический сдвиг вправо;
      • ~(x: num): num — побитовое НЕ;
    • математические функции:
      • математические константы:
        • nan(): num;
        • inf(): num;
        • pi(): num;
        • e(): num;
      • floor(x: num): num;
      • ceil(x: num): num;
      • trunc(x: num): num;
      • round(x: num): num;
      • sin(x: num): num;
      • cos(x: num): num;
      • tn(x: num): num;
      • arcsin(x: num): num;
      • arccos(x: num): num;
      • arctn(x: num): num;
      • angle(x: num, y: num): num — atan2;
      • pow(base: num, exponent: num): num;
      • sqrt(x: num): num;
      • exp(x: num): num;
      • ln(x: num): num;
      • lg(x: num): num;
      • abs(x: num): num;
      • is_nan(x: num): bool;
      • генерация псевдослучайных чисел:
        • seed(x: any): nil — устанавливает начальное состояние генератора псевдослучайных чисел; если x равен nil, то для генерации начального состояния используется системный источник энтропии, а если тот недоступен — системное время; если x имеет любое другое значение, то для генерации начального состояния используется хеш от x;
        • random(): num — возвращает псевдослучайное число в диапазоне [0; 1);
  • функции для работы со списками:
    • [](): list<any> — возвращает пустой список;
    • ,(head: any, tail: list<any>): list<any> — конструирует новый список из переданных головы и хвоста;
    • head(list: list<any>): any — возвращает голову переданного списка, если он не пуст; в противном случае возвращается nil;
    • tail(list: list<any>): nil|list<any> — возвращает хвост переданного списка, если он не пуст; в противном случае возвращается nil;
  • функции для работы со строками:
    • num(x: str): num — парсит число из строки;
    • str(x: any): str — преобразует переданное значение в строку;
    • strb(x: bool): str — преобразует переданное логическое значение в строку: если x истинно, возвращает "true", иначе — "false";
    • strs(x: str): str — преобразует переданную строку в другую строку, экранируя её символы и окружая всю строку кавычками;
    • strl(x: list<str>): str — преобразует переданный список строк в строку, отображая при этом строки как строки;
    • strh(x: hash<str, any>): str — преобразует переданную хеш-таблицу, у которой ключи имеют строковый тип, в строку, отображая при этом ключи как строки;
    • strhh(x: hash<str, str>): str — преобразует переданную хеш-таблицу, у которой и ключи, и значения имеют строковый тип, в строку, отображая при этом и ключи, и значения как строки;
  • функции для работы с хеш-таблицами:
    • {}(): hash<any, any> — возвращает пустую хеш-таблицу;
    • #(key: any, value: any, hash: hash<any, any>): hash<any, any> — если value не равно nil, то возвращает новую хеш-таблицу, в которую было добавлено значение value с ключом key; если value равно nil, то возврашает новую хеш-таблицу, из которой было удалено значение с ключом key;
    • keys(hash: hash<any, any>): list<any> — возвращает список ключей хеш-таблицы hash;
  • функции для упаковки:
    • >@(x: any): pack<any> — упаковывает переданное значение без его предварительного вычисления;
    • <@(x: pack<any>): any — распаковывает переданное значение;
    • <<@(x: pack<any>): any — распаковывает переданное значение в цикле до тех пор, пока результат является упакованным значением;
  • системные функции:
    • load(filename: str): any — загружает файл скрипта filename, выполняет его и возвращает полученный результат;
    • is_main(): bool — возвращает истину, если файл, в котором она была вызвана, был передан для загрузки непосредственно интерпретатору, и ложь — если был загружен посредством функции load;
    • args(): list<str> — возвращает список аргументов командной строки, причём первым аргументом будет путь к файлу скрипта; если же код скрипта был прочитан с stdin, первым аргументом будет строка "__stdin__";
    • env(name: str): nil|str — возвращает значение указанной переменной окружения, если она установлена; в противном случае возвращается nil; также интерпретатором осуществляется загрузка .env-конфига из текущей рабочей директории;
    • time(): num — возвращает текущее UNIX-время по UTC;
    • sleep(seconds: num): nil — останавливает выполнение скрипта на указанное количество секунд; seconds может быть вещественным числом;
    • exit(status: nil|num|str): nil — завершает выполнение скрипта; дополнительное поведение зависит от переданного статуса:
      • если status равен nil, то код возврата будет равен 0;
      • если status имеет тип num и находится в диапазоне [0, 127], то код возврата будет равен status;
      • если status имеет тип str, то код возврата будет равен 1, а status будет выведен в stderr (вместе с дополнительным символом '\n' в конце);
    • функции для ввода/вывода:
      • in(number: nil|num): str — считывает указанное количество символов из stdin и возвращает их в виде строки; если количество будет отрицательным или вместо него будет передан nil, то будут считаны все доступные символы;
      • inln(number: nil|num): str — считывает указанное количество символов из stdin и возвращает их в виде строки; если количество будет отрицательным или вместо него будет передан nil, то будут считаны все символы до символа '\n' или, если он отсутствует, все доступные символы;
      • out(string: str): nil — выводит переданную строку в stdout;
      • outln(string: str): nil — выводит переданную строку в stdout и переводит строку (добавляет символ '\n');
      • err(string: str): nil — выводит переданную строку в stderr;
      • errln(string: str): nil — выводит переданную строку в stderr и переводит строку (добавляет символ '\n').