Инструменты пользователя

Инструменты сайта


Боковая панель

help:expressions

Это старая версия документа.


Назад: Переменные

Выражения

Выражение - набор констант, переменных, функций, связанных различными операциями. При записи выражений возможно использование скобок.

Обозначения

  • [выр] - выражение может быть как текстового, так и числового типа.
  • [$выр] - выражение текстового (строкового) типа (но при необходимости движок автоматически переведёт число в строку).
  • [#выр] - выражение числового типа (если возможно, движок автоматически переведёт строку в число).

Примечение. Символ '#' использован в справке только чтобы разделить выражения произвольного и числового типов. К синтаксису QSP данный символ отношения не имеет.

Приоритет операций

Операции перечислены в порядке убывания приоритетов (с одинаковым приоритетом находятся на одной строке).

  • ([выр]) - выражения в скобках
  • +, - (унарные)
  • *, /
  • MOD
  • +, -
  • =, <, >, !, <>, <=, >=, =<, =>
  • OBJ, LOC, NO
  • AND
  • OR
  • &

Примечание. В плеерах на последних версиях библиотеки (т.е. Quest Navigator и те, о которых автору статьи неизвестно) операция & по приоритету находится между сложением/вычитанием и сравнениями.

  • Максимальная вложенность выражений - 30. Т.е. не глубже 30-ти открытых скобок.
  • Максимальное количество операторов на одном уровне вложенности - 100.
  • Операции с одинаковым приоритетом выполняются слева направо.

Описание операций

  • +[#выр], -[#выр] - унарные плюс / минус. Находятся перед числовым выражением и меняют знак у значения этого выражения (в случае "-").
  • + , - , *, / - сложение, вычитание, умножение, деление соответственно.
    Операции записываются как [#выр1] [операция] [#выр2].
  • [#выр1] MOD [#выр2] - остаток от деления.
  • [выр1] = [выр2] - верно, если значения рядом стоящих выражений равны.
  • [выр1] < [выр2] - верно, если значение выражения слева меньше значения выражения справа.
  • [выр1] > [выр2] - верно, если значение выражения слева больше значения выражения справа.
  • [выр1] ! [выр2], [выр1] <> [выр2] - верно, если значения рядом стоящих выражений не равны.
  • [выр1] <= [выр2], [выр1] =< [выр2] - верно, если значение выражения слева меньше или равно значению выражения справа.
  • [выр1] >= [выр2], [выр1] => [выр2] - верно, если значение выражения слева больше или равно значению выражения справа.
  • OBJ [$выр] - верно, если в рюкзаке есть предмет [$выр].
  • LOC [$выр] - верно, если в игре есть локация с названием [$выр].
  • NO [#выр] - побитовая инверсия 1). В основном используется как логическая инверсия.
  • [#выр1] OR [#выр2] - операция побитового "или". Во всём выражении будут равны единице те биты, которые равны единице хотя бы в одном из двух выражений.
  • [#выр1] AND [#выр2] - операция побитового "и". Во всём выражении будут равны единице те биты, которые равны единице в каждом из двух выражений.
  • [$выр1] & [$выр2] - операция объединения строковых выражений. Подробнее см. Строки.

Верным считается числовое выражение, значение которого отлично от 0. При значении 0 выражение считается ложным. Для значения "верно" настоятельно рекомендуется использовать -1, т.к. только в этом случае будут адекватно работать побитовые операторы в роли логических.

Примеры

x=5
y=6
(x ! y) OR (x <> y)	&! Результат -1
x OR y			&! Двоичное 101 OR 110 = 111 Результат 7
x AND y 		&! Двоичное 101 AND 110 = 100 Результат 4
y MOD x			&! 6/5 -> остаток 1 Результат 1
OBJ 'стул'		&! Если в инвентаре есть предмет 'стул', то результат -1, если нет, то 0
LOC 'дом'		&! Если в игре есть локация 'дом', то результат -1, если нет, то 0
res = x*y + y*-x/2	&! (5*6) + (6*(-5)/2)=15  Результат 15
res = NO x = y		&! NO 0 = -1  Результат -1

15*5/2			&! (15*5)/2 = 75/2 = 37
15/2*5			&! (15/2)*5 = 7*5 = 35

Сокращенные операции с присвоением

Язык QSP поддерживает следующие сокращенные операции:

x += y   &! x = x+y
x -= y   &! x = x-y
x /= y   &! x = x/y
x *= y   &! x = x*y


Вперёд: Программный код

1) NO x соответствует -1-x, откуда можно сделать вывод о кодировке отрицательных чисел
help/expressions.1407110518.txt.gz · Последние изменения: 2022/12/31 12:39 (внешнее изменение)