Normative Rules: Argument Evaluation Order
← Prev | ↑ Chapter | Next → | Index | Symbols
Normative Rules: Argument Evaluation Order
Statement
For every ordinary call (operator e1 e2 e3 ...) — i.e. every call whose operator is not a special form — the argument expressions e1, e2, e3, ... are evaluated strictly left-to-right, with each argument's side effects visible to the next.
Special forms (setq, if, cond, and, or, while, repeat, foreach, lambda, function, defun, defun-q, progn, quote, command, trace, untrace, vlax-for) decide their own evaluation order; their per-entry rules override this default.
Vendor Evidence
BricsCAD V26 / macOS direct probe: a side-effecting note function records each argument's invocation order. (+ (note 1) (note 2) (note 3)), (list (note 1) (note 2) (note 3)), and an immediately-applied lambda ((lambda (a b c) ...) (note 1) (note 2) (note 3)) all yield the recorded sequence (1 2 3). The order is identical for builtin operators, ordinary user functions, and lambda calls.
Cross-references
- Compare CLHS 3.1.2.1.2.3 — Common Lisp specifies left-to-right argument evaluation.
- Compare R7RS 4.1.3 — Scheme specifies that argument evaluation order is unspecified, only that each is fully evaluated before any procedure is applied. AutoLISP picks the stricter contract.
Source Notes
Phase-6 BricsCAD V26 / macOS general-semantics probe — results/bricscad/macos/20260426T*-semantics/ section A.