Операции
Список операций для плеера версии 5.8.0 в порядке возрастания приоритета:
OR
AND
NO
=
,<
,>
,!
,<>
,<=
,>=
,=<
,=>
(операции сравнения)OBJ
,LOC
&
(конкатенация)+
,-
(сложение, вычитание)MOD
*
,/
(умножение, деление)-
(унарный минус)([выр])
- выражения в скобках
Операции записанные на одной строке имеют одинаковый приоритет и выполняются по порядку слева направо, если присутствуют на одном уровне в выражении.
Операции в скобках имеют приоритет перед другими операциями.
Вычисление значений функций имеет приоритет перед всеми операциями.
Верным считается числовое выражение, значение которого отлично от 0
. При значении 0
выражение считается ложным. Для значения "верно" настоятельно рекомендуется использовать 1
для совместимости с логическими операциями и функциями, возвращающими логические значения.
В более старых версиях плееров порядок приоритета был иной.
&
OR
AND
OBJ
,LOC
,NO
=
,<
,>
,!
,<>
,<=
,>=
,=<
,=>
+
,-
MOD
*
,/
+
,-
(унарные)
Некоторые особенности операций сравнения:
-
Операции сравнения возвращают
1
(верно) или0
(неверн о) в зависимости от результата сравнения. -
При сравнении чисел всё просто:
- из двух положительных чисел положительное число большее по модулю будет считаться большим;
- отрицательное число всегда меньше не отрицательного (положительное и нуль);
- положительное число всегда больше не положительного (отрицательное и нуль);
- из двух отрицательных чисел отрицательное число большее по модулю будет считаться меньшим.
-
При сравнении строк происходит посимвольное сравнение слева направо:
- большим считается символ, который в таблице символов стоит позже. Можно опираться на алфавитную последовательность символов, чтобы понять, какая строка окажется большей. Тогда символ '
z
' будет больше символа 'a
'. Примеры:
'z' > 'a' & ! вернёт 1
'z' > 'az' & ! вернёт 1
'akz' > 'akk' & ! вернёт 1- при сравнении любой непустой строки с пустой строкой пустая строка будет считаться меньшей:
' ' > '' & ! вернёт 1
'a' > '' & ! вернёт 1
'z' > '' & ! вернёт 1
'akzakz' > 'akzak' & ! вернёт 1Можно считать,что отсутствующие символы в строке — это пустые символы (пустые строки), которые при сравнении с любым другим символом оказываются меньшим.
- при сравнении строки с числом, плеер попытается преобразовать оба значения к числу. Если это удастся, будут сравниваться числа. Если не удастся — число будет преобразовано в строку, и будут сравниваться строки.
'zzz' > 123 & ! вернёт 1
'123' > 92 & ! вернёт 1
'123' > '92' & ! вернёт 0 - большим считается символ, который в таблице символов стоит позже. Можно опираться на алфавитную последовательность символов, чтобы понять, какая строка окажется большей. Тогда символ '
-
При сравнении кортежей происходит поэлементное сравнение слева направо:
- большим будет считаться тот кортеж, элемент которого оказался большим:
[1, 2, 3] > [1, 2, 2] & ! вернёт 1
[2, 2, 3] > [1, 2, 3] & ! вернёт 1- при сравнении любого непустого кортежа с пустым кортежем, пустой кортеж будет считаться меньшим:
[1] > [] & ! вернёт 1
[''] > [] & ! вернёт 1
[0] > [] & ! вернёт 1
[1, 2] > [1] & ! вернёт 1
[1, 2] < [9] & ! вернёт 1Можно считать,что отсутствующие элементы в к ортеже — это пустые элементы, которые при сравнении с любым другим элементом оказываются меньшим.
- при сравнении кортежей с числами или строками, число или строка будут сравниваться, как кортеж из одного элемента. Для упрощения понимания можно считать, что число или строка при сравнении преобразуются в кортеж:
[8] < 9 & ! вернёт 1
[9, 8] > 9 & ! вернёт 1
[0, 0] > 9 & ! вернёт 0
[8, 9] > '8,9' & ! вернёт 0
['a', 'z'] < 'az' & ! вернёт 1
['a', 'z'] > 'a' & ! вернёт 1
(['az'] = "az") & ! вернёт 1
Не проводить сравнения значений разных типов, чтобы это не приводило к путанице.
*
(умножение)
*
— арифметическая операция "УМНОЖЕНИЕ". Перемножает два числа. Общая запись:
[#выражение 1] * [#выражение 2]
, где [#выражение 1]
и [#выражение 2]
— два любых числовых значения, или выражения. Результатом работы операции является произведение двух чисел.
Примеры:
2 * 2 & ! вернёт 4
4 * 2 & ! вернёт 8
17 * 5 & ! вернёт 85
37 * 100 & ! вернёт 3700
Можно использовать с кортежами, значениями которых являются числа и/или другие кортежи, содержащие числа. Общая запись:
[%кортеж] * [#число]
В данном случае каждый элемент кортежа будет умножен на указанное число. Примеры:
%tuple = [4, 10, 16]
%a = %tuple * 2
! %a будет равно [8, 20, 32]
[4, 10] * 'b' & ! ошибка о несоответствии типов данных
Обратите внимание на последний пример. Ошибка о несоответствии типов данных возникает из-за того, что невозможно применить операцию умножения к строковому значению. Такая же ошибка возникнет, если кортеж будет содержать строковые значения. Однако перемножать между собой кортежи, содержащие только числовые значения можно:
*pl [2, 3] * [4, 5]
! [2 * [4,5], 3 * [4,5]]
! [[8,10],[12,15]]
В этом случае каждый элемент первого кортежа умножается на второй кортеж. Это и даёт нам в результате новый кортеж из двух кортежей.
*=
(умножение-присвоение)
*=
— операция "УМНОЖЕНИЕ-ПРИСВОЕНИЕ". Сочетает в себе операции присвоения и умножения. Умножает значение указанной переменной на определённое число и возвращает результат той же переменной. Общая запись:
ИМЯ_МАССИВА *= [#выражение 1]
, где ИМЯ_МАССИВА
— это название переменной (без кавычек), или название массива с указанием ячейки, а [#выражение 1]
— любое числовое значение или выражение.
Аналогично конструкции:
ИМЯ_МАССИВА = ИМЯ_МАССИВА*[#выражение 1]