Песочница

Выражения и порядок вычисления

Порядок вычисления наблюдаем и закреплён: сначала оператор, затем операнды слева направо, после чего проверяется арность и выполняется вход в процедуру.

Кратко

LISPEX
(define x 0)
(list (begin (set! x 1) x) (begin (set! x (+ x 1)) x))

Результат

OUTPUT
(1 2)

Текущие гарантии

  • Инициализаторы let вычисляются слева направо во внешнем окружении; let* расширяет по одному связыванию; letrec сначала выделяет все ячейки.
  • Последовательности вычисляются слева направо и отбрасывают пакеты значений не последних выражений.
  • and и or выполняют короткое замыкание слева направо; ложно только #f.

Границы

  • Lispex не наследует неопределённый порядок операндов другой реализации Scheme.
  • Ошибка арности возникает после обязательного вычисления оператора и операндов.