Нововведения в QSP 5.9.1
Клуб любителей текстовых игр на QSP·26 ноя 2024
Оператор 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([$исходный текст], [$значение для поиска], [$значение для замены], [#количество замен])
Если [$значение для замены] не указано, то используется пустая строка (т.о. из текста будут удалены все искомые подстроки).
Если количество замен не указано, то функция заменяет все вхождения строки [$значение для поиска], иначе заменяет только первые [#количество замен] подстрок.
Функция возвращает текст, получившийся после замены подстрок в [$исходный текст].
Оригинал статьи: https://qsp.org/index.php?option=com_content&view=article&id=166&catid=34&Itemid=76