Выражения
Выражение - это набор значений, констант, переменных, функций, связанных между собой различными операциями. Программа выполняет (интерпретирует) такое выражение, вычисляя его значение.
Для изменения приоритета операций в выражении могут присутствовать круглые скобки.
Обозначения
[выр]- выражение может быть как текстового, так и числового типа.[$выр]- выражение текстового (строкового) типа (но при необходимости движок автоматически переведёт число в строку).[#выр]- выражение числового типа (если возможно, движок автоматически переведёт строку в число).[%выр]- выражение возвращает кортеж.
Примечание. Символ # исп ользован в справке только чтобы разделить выражения произвольного и числового типов. К синтаксису QSP данный символ отношения не имеет.
Приоритет операций
Операции в выражении выполняются в порядке приоритета. Операции с одинаковым приоритетом выполняются по порядку слева направо.
Вот список операций для плееров QSP версии 5.9.0 в порядке повышения приоритета (от меньшего к большему):
ORANDNO=,<,>,!,<>,<=,>=,=<,=>(операции сравнения)OBJ,LOC&(конкатенация)+,-(сложение, вычитание)MOD*,/(умножение, деление)-(унарный минус)([выр])- выражения в скобках
Выражения в QSP должны удовлетворять следующим условиям:
- Максимальная вложенность выражений - 30. Т.е. не глубже 30-ти открытых и вложенных друг в друга скобок.
- Максимальное количество операций на одном уровне вложенности - 100.
Описание операций
Важно! Поскольку в QSP нет булевого типа данных, истинность или ложность выражения определяется по его числовому значению. Верным считается числовое выражение, значение которого отлично от 0. При значении 0 выражение считается ложным. Для значения "верно" настоятельно рекомендуется использовать число 1, т.к. операции сравнения и логические операции возвращают именно это значение в случае истинности выражения.
Математические операции
-
-[#выр]- унарный минус. Можно постави ть перед числовым выражением и таким образом поменять знак этого выражения на противопложный:x = -12
*pl -x & ! выведет на экран число 12
*pl -(123*12/-10)
*pl -10/-5 -
+,-,*,/- сложение, вычитание, умножение, деление соответственно.
Операции записываются как[#выр1] [операция] [#выр2]:15+2*5 &! 15+2*5 = 15+10 = 25
15*2+5 &! 15*2+5 = 30+5 = 25
15*5/2 &! (15*5)/2 = 75/2 = 37
15/2*5 &! (15/2)*5 = 7*5 = 35 -
[#выр1] MOD [#выр2]- остаток от деления. Это операция, которой нас учат ещё в начальной школе. Если мы вычисляем, сколько раз число делится нацело на другое число, то в результате может остаться некая неучтённая часть. Например, если мы хотим разделить 10 на 3, то число 10 нацело делится на 3 только три раза. Но 3 умножить на 3 - это 9. Значит, от десяти осталась часть, которая не делится на 3, это 1 (10 - 9 = 1). Эта часть и называется остатком от деления. Для числа 12 остаток от деления на 3 составляет ноль, поскольку двенадцать делится на 3 ровно четыре раза. Примеры:10 mod 2 & ! 10/2 = 5 -> 2*5=10 -> 10-10 = 0 -> остаток от деления 10 на 2 равен 0
10 mod 3 & ! 10/3 = 3 -> 3*3=9 -> 10-9 = 1 -> остаток от деления 10 на 3 равен 1
10 mod 4 & ! 10/4 = 2 -> 4*2=8 -> 10-8 = 2 -> остаток от деления 10 на 4 равен 2
10 mod 5 & ! 10/5 = 2 -> 5*2=10 -> 10-10 = 0 -> остаток от деления 10 на 5 равен 0
10 mod 6 & ! 10/6 = 1 -> 6*1=6 -> 10-6 = 4 -> остаток от деления 10 на 6 равен 4
10 mod 7 & ! 10/7 = 1 -> 7*1=7 -> 10-7 = 3 -> остаток от деления 10 на 7 равен 3
Операции сравнения
-
[выр1] = [выр2]- операция равно. Верно, если значения рядом стоящих выражений равны. Данную операцию не стоит путать с операцией присваивания, хотя на первый взгляд они похожи. Чтобы операция равно корректно вернула значение, она должна быть записана после ключевого словаIF,ELSEIF,WHILEили в первом аргументе функцииIIF, или стоять после явного оператора вывода текста вроде*PL, или если используется с неявным оператором, быть заключённой в скобки. Примеры:! операция сравнения **равно** с явным указанием оператора перед ней:
*pl 6+12 = 6*3 & ! 6+12 = 6*3 -> 18=18 -> на экране мы увидим число 1, что означает, что значения выражений равны
*pl 226 = 15*15 & ! 226 = 15*15 -> 226=225 -> на экране увидим **0**, так как 226 не равно 225.
! операция сравнения **равно** с неявным оператором
('ab'+'cd' = 'abc'+'d') & ! на экране увидим 1, так как 'ab'+'cd' равно 'abc'+'d'
(13*9 = 19*3) & ! на экране увидим 0, так как 13*9 не равно 19*3
! операция сравнения в условии
if x = y:
*pl "Числа равны"
else
*pl "Числа не равны"
end -
[выр1] < [выр2]- операция меньше. Верно, если значение выражения слева меньше значения выражения справа.*pl 37<56 & ! на экране будет число 1, так как 37 меньше 56
*pl 45<23 & ! на экране будет число 0, так как 45 не меньше 23
*pl 45<45 & ! на экране будет число 0, так как 45 не меньше 45
if x < y:
"X меньше Y"
elseif y < x:
"Y меньше X"
else
"Числа равны"
end -
[выр1] > [выр2]- операция больше. Верно, если значение выражения слева больше значения выражения справа.*pl 37>56 & ! на экране будет число 0, так как 37 не больше 56
*pl 45>23 & ! на экране будет число 1, так как 45 больше 23
*pl 45>45 & ! на экране будет число 0, так как 45 не больше 45
if x > y:
"X больше Y"
elseif y > x:
"Y больше X"
else
"Числа равны"
end -
[выр1] ! [выр2], [выр1] <> [выр2]- операция не равно. Верно, если значения рядом стоящих выражений не равны.! операция сравнения **равно** с явным указанием оператора перед ней:
*pl 6+12 ! 6*3 & ! 6+12 = 6*3 -> 18=18 -> на экране мы увидим число 0, что означает, что значения выражений не равны
*pl 226 ! 15*15 & ! 226 = 15*15 -> 226=225 -> на экране увидим **1**, так как **226** не равно **225**.
! операция сравнения **равно** с неявным оператором
*pl 'ab'+'cd' <> 'abc'+'d' & ! на экране увидим 0, так как 'ab'+'cd' равно 'abc'+'d'
*pl 13*9 <> 19*3 & ! на экране увидим 1, так как 13*9 равно 19*3
! операция сравнения в условии
if x <> y:
*pl "Числа н е равны"
else
*pl "Числа равны"
endПримечание. Во избежание путаницы с оператором комментария
!лучше не использовать для записи операции не равно восклицательный знак. -
[выр1] <= [выр2], [выр1] =< [выр2]- операция меньше либо равно. Верно, если значение выражения слева меньше или равно значению выражения справа.*pl 37<=56 & ! на экране будет число 1, так как 37 меньше 56
*pl 45<=23 & ! на экране будет число 0, так как 45 не меньше и не равно 23
*pl 45<=45 & ! на экране будет число 1, так как 45 равно 45
if x <= y:
"X меньше либо равно Y"
else
"Y меньше X"
endПримечание. Запись
=>редко применяется в других языках программирования, поэтому рекомендуем не привыкать к её использованию, хотя в QSP это ошибкой не будет. -
[выр1] >= [выр2], [выр1] => [выр2]- операция больше либо равно. Верно, если значение выражения слева больше или равно значению выражения справа.*pl 37>=56 & ! на экране будет число 0, так как 37 не больше и не равно 56
*pl 45>=23 & ! на экране будет число 1, так как 45 больше 23
*pl 45>=45 & ! на экране будет число 1, так как 45 равно 45
if x >= y:
"X больше либо равно Y"
else
"Y больше X"
endПримечание. Запись
=>редко применяется в других языках программирования, поэтому рекомендуем не привыкать к её использованию, хотя в QSP это ошибкой не будет.