Порядок вычисления наблюдаем и закреплён: сначала оператор, затем операнды слева направо, после чего проверяется арность и выполняется вход в процедуру.
Кратко
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.
- Ошибка арности возникает после обязательного вычисления оператора и операндов.