Arguments to procedures are always passed by value, which
means that the actual argument expressions are evaluated before the
procedure gains control, whether the procedure needs the result of the
evaluation or not. ML, C, and APL are three other languages that always
pass arguments by value.
This is distinct from the lazy-evaluation semantics of Haskell,
or the call-by-name semantics of Algol 60, where an argument
expression is not evaluated unless its value is needed by the
procedure.
The expression language, like most dialects of Lisp, employs a fully parenthesized prefix
notation for expressions and (other) data; the grammar of the expression language generates a
sublanguage of the language used for data.