QSP 5.9.1
Автор: Byte   
26.11.2024 01:25

Здесь описаны основные изменения в QSP 5.9.1:


Основные изменения в версии QSP 5.9.1:


Оператор SETVAR

Дополняет функцию ARRITEM и позволяет в некоторых типовых случаях избежать генерации кода и оператора DYNAMIC.

Синтаксис: SETVAR [$имя переменной], [значение], [индекс]

Префикс имени переменной указывает тип значения, которое нужно записать в элемент массива (как с обычными присваиваниями).
Параметр [индекс] опционален и позволяет указать индекс элемента массива, которому нужно присвоить значение. Если этот параметр не указан, то значение присваивается 0-му элементу.
Значение и индекс могут быть любых типов.

Примеры:

SETVAR 'A', 65
SETVAR '$X', 'name', 4
SETVAR '$X', 'name', 'string index'
SETVAR '%Q', ['пример', 'кортежа'], 3
SETVAR '%Q', ['пример', 'кортежа'], [x, y]

Функция ARRTYPE

Позволяет получить тип значения элемента массива.

Синтаксис: ARRTYPE([$имя переменной], [индекс])

Параметр [индекс] опционален и позволяет указать индекс элемента массива, значение которого нужно проверить. Если этот параметр не указан, то проверяется 0-й элемент.
Индекс может быть любого типа.

Функция возвращает одно из следующих значений:

'' (пустая строка) - элемент массива не задан.
'#' - элемент содержит число.
'$' - элемент содержит строку.
'%' - элемент содержит кортеж.

Функция ARRPACK

Позволяет упаковать массив в кортеж. Это может быть полезно для разбора параметров функции в именованные переменные.

Синтаксис: ARRPACK([$имя переменной], [#начальный индекс], [#количество элементов])

Начальный индекс и количество элементов опциональны. По умолчанию начальный индекс равен 0, количество элементов равно количеству элементов в массиве.
Функция возвращает кортеж из элементов указанной части массива.

Примеры:

LOCAL type, name = ARRPACK('args')
type, name = ARRPACK('args', 1, 3)

Оператор UNPACKARR

Позволяет записать значения из кортежа в массив.

Синтаксис: UNPACKARR [$имя массива], [%кортеж], [#начальный индекс], [#количество элементов]

Начальный индекс и количество элементов опциональны. По умолчанию начальный индекс равен 0, количество элементов равно количеству элементов в кортеже.

Примеры:

UNPACKARR 'A', ['тест','нескольких','значений',67]
! $A[0] будет содержать 'тест'
! $A[1] будет содержать 'нескольких'
! $A[2] будет содержать 'значений'
! A[3] будет содержать 67

Функция RAND

Добавлен опциональный 3й параметр, указывающий моду нормального распределения (распределение Гаусса).
Возможна генерация чисел из всего указанного диапазона, но с различной вероятностью (см. усеченное нормальное распределение). Это упрощает создание игровых механик, где разные числа выпадают с различной вероятностью, но согласно нужному закону распределения (например, сумма при броске игровых костей при большом числе бросков стремится к нормальному распределению). С помощью указания моды в различных частях диапазона (или даже вне пределов диапазона) функция позволяет задать практически любую полезную кривую распределения чисел.

Синтаксис: RAND([#минимальное значение], [#максимальное значение], [#мода])

Если 3й параметр не указан, то функция возвращает случайное число в заданном диапазоне с равномерным/равновероятным распределением чисел.
При указании параметра [#мода] функция генерирует случайное число в заданном диапазоне согласно усеченному нормальному распределению.

Примеры:

x = RAND(1, 100)
x = RAND(1, 1000, 500)
x = RAND(1, 1000, 1)
x = RAND(1, 1000, 1000)
x = RAND(-1000, 0, -500)
x = RAND(1, 1000, 5000)
x = RAND(-1000, -100, -5000)

Функция REPLACE

Добавлен опциональный 4й параметр, указывающий максимальное количество замен искомой строки.

Синтаксис: REPLACE([$исходный текст], [$значение для поиска], [$значение для замены], [#количество замен])

Если [$значение для замены] не указано, то используется пустая строка (т.о. из текста будут удалены все искомые подстроки).
Если количество замен не указано, то функция заменяет все вхождения строки [$значение для поиска], иначе заменяет только первые [#количество замен] подстрок.

Функция возвращает текст, получившийся после замены подстрок в [$исходный текст].