В отличие от Схемы, ракетка гарантируется слева направо.Так для примера вызова:
(proc-expr arg-expr ...)
Вы можете прочитать следующее в Guide : (выделение мое)
Вызов функции оценивается первымвычисление proc-expr и всех arg-exprs по порядку (слева направо) .
Это означает, что эта программа:
(define a 0)
(define (++a) (set! a (add1 a)) a)
(list (++a) (++a))
; ==> (1 2)
И этосогласуется.Для Схемы (2 1)
это альтернативное решение.Вы можете форсировать порядок, используя привязки, и можете получить такой же результат, как этот:
(let ((a1 (++ a)))
(list a1 (++ a)))
; ==> (1 2)