Семантика формул

Ещё раз напомним, что формулы в Python (впрочем, как и в большинстве других языков) составляются из переменных, операторов и литералов. А именно, формула — это одно из трёх:

  • переменная
  • литерал
  • оператор и последовательность (возможно, пустая) формул, называемых подформулами или операндами этого оператора

У каждой формулы есть связанная с ней процедура вычисления её значения:

  • значением переменной является её текущая привязка
  • значение литерала вычисляется по связанному с этим литералом правилу
  • значение оператора (за редким исключением) вычисляется так: сперва слева направо вычисляются значения всех подформул, затем к этим значениям применяется правило, связанное с этим оператором

При вычислении значений некоторых формул происходят побочные эффекты, которые выражаются в каком-либо наблюдаемом во время вычисления этой формулы поведении программы.

Формально проще определить отсутствие побочных эффектов. А именно, будем говорить, что формула не имеет побочных эффектов, если вставка её в произвольные места произвольной программы, в которых входящие в неё элементы имеют смысл, не изменяет результата работы программы.

Например, формула print("Hello world!") имеет побочный эффект (отправка текста Hello world на стандартный выход программы), а формула 2+3*4 побочных эффектов не имеет (если таковым эффектом не считать нагрев окружающей среды в результате работы ЭВМ).