Numlex Документация
Справочник синтаксиса
Сообщить о проблеме

Операторы и логика

Полный приоритет, арифметика, сравнения, булева логика (истинные правила короткого замыкания) и точные побитовые правила.

Каждое выражение в Numlex вычисляется одной строгой грамматикой операторов: единой лестницей приоритетов для арифметики и логики, настоящими логическими значениями (без приведения 1/0) и отдельными точными правилами для побитовой работы.

Эта страница — полный справочник операторов: приоритет от if/then/else до постфиксных операторов, значение каждого оператора, точное место короткого замыкания (&& при ложной левой части — и больше нигде) и таблица приоритетов для точных целых, проверяемые сдвиги и поведение при переполнении.

Приоритет

От низшего к высшему:

if … then … else …     (right-associative)
or  /  ||
and /  &&
not /  !
==  !=
<  <=  >  >=
+  −                   (left)
*  ×  /  ÷             (left; `of` after a percent or multiplier is this level)
^                      (power, right)
unary + / −
primary                (literals, parentheses, calls, % and x postfixes)

Операторы

ОператорСмыслПримечания
+ −сложение / вычитаниев аддитивном контексте «чистый» процент справа — доля от накопленной левой части: 100 + 10% = 110
* × / ÷умножение / деление200 × 10% = 20, 200 / 10% = 2000
^степеньникогда не XOR (XOR — слово xor для целых)
% (постфикс)p% = p/100семантический «процент» в аддитивном контексте
x (постфикс)1.5x = множитель 1.5распознаётся только если переменная x не активна
of (инфикс, уровень *)15% of 490 = 73.5левая часть должна быть процентом или множителем (1.5x): 1.5x of 20 = 30, цепочки 10% of 20% of 50 = 1; 3 of 4 — ошибка. В процентных строках базис N% of E — остаток строки: 15% of 490 + 5 = 74.25
< <= > >=сравнениячисловые; результат — логический
== !=равенство / неравенствологический результат
and &&конъюнкция&& коротко замыкает только при ложной левой части: false && (1/0 > 0) = false; true && … и слово and всегда вычисляют правый операнд
or ||дизъюнкцияне коротко замыкает: оба операнда вычисляются — false or (1/0 > 0) и false || (1/0 > 0) дают ошибку деления на ноль
not !отрицаниепрефикс
if a then b else cусловиенизший приоритет; ветки — полные выражения; else обязателен

Подробнее о процентных и множительных формах — в процентах.

Логические значения — настоящий тип

true и false никогда не приводятся к 1/0. Смешение логического значения и числа в одном операторе — ошибка.

Глифы против слов

  • Глифы & и | всегда побитовые: с логическими операндами это ошибка (false | (1/0 > 0) → «Invalid expression»).
  • Только слова and/or контекстны: два целых делают их побитовыми, два логических — логическими.

Точные целые и побитовые операторы

Режим точных целых включают:

  • Сильно: литералы 0x… / 0b… / 0o…, вызовы int( bin( oct( hex(, фразы … as|in <base> / … to base N, побитовые глифы & | << >> и слово xor. Глифы считаются только когда в строке есть математическое содержимое — fish & chips остаётся прозой.
  • Слабо: слово and/or, когда обе стороны — целые.

Приоритет для целых, от низшего к высшему:

if/then/else  →  ||  →  &&  →  | / or  →  xor  →  & / and
→  comparisons == != < <= > >=  →  shifts << >>  →  + -  →  * / %  →  ^
→  unary  →  primaries
ОператорСмыслПримечания
&побитовое И
|побитовое ИЛИглиф всегда побитовый: логические операнды — ошибка (false | (1/0 > 0))
xorпобитовое исключающее ИЛИ (слово)6 xor 3 = 5
<<сдвиг влевосдвиг 0…63; переполнение — ошибка
>>сдвиг вправосдвиг 0…63; арифметический для отрицательных
/целочисленное делениерезультат — обычное число при наличии остатка
%остаток
^степеньпоказатель проверяется; отрицательный показатель даёт обычное число

Все значения здесь — точные целые: 0x7FFFFFFFFFFFFFFF = 9223372036854775807. Переполнение — видимая ошибка, никогда не «обёртка» и не тихо округлённое число. Деление с остатком, отрицательный показатель и нецелые значения «выходят» за пределы точных целых, поэтому ставьте явные скобки на границах.

Литеральные формы и базовые имена — в числах и системах счисления.

Связанные разделы

Нашли ошибку в документации? Сообщите о ней на GitHub