
Chapter 3: Proposal 6
3 Proposal
Given the preceding observations, we think that section 22.3 of the Common Lisp Hyperspec
needs clarification on:
• the status of commas, either trailing ones or as a separator between two parameters,
• the exact semantics of the V parameter when associated with a nil argument, and the exact
meaning of “omitted” in such a case.
3.1 Rationale for Commas
A very pertinent argument in favor or not giving a specific status to trailing commas is provided
by Martin Simmons: it allows one to provide a single, empty parameter to a directive, something
which would not be possible otherwise. Indeed, consider the following situation:
☛ ✟
(format t "~,/fmt/")
=> (NIL NIL) ;; for SBCL
=> (NIL) ;; for CMU-CL
✡ ✠
There is no way SBCL can get a single, empty parameter with its current behavior, which
can be problematic. Therefore it seems preferable to consider commas, including trailing ones,
as “part of” the preceding parameter, and not give trailing commas any particular meaning. If
one wants two empty parameters, one would just use two consecutive commas.
Since there is also no reason for trailing commas to behave differently, according to whether
they are followed by the directive character or by a modifier, we therefore suggest that “confor-
mant” implementations should behave like CMU-CL, CCL, CLISP, Allegro and LispWorks.
3.2 Rationale for V Parameters
As mentioned previously, the example of an “omitted” parameter in the Hyperspec really is that
of an “empty” parameter, rather than that of an “absent” one (the comma separating it from
the next parameter is still here).
CMU-CL, CCL, CLISP, Allegro and LispWorks interpret it this way. SBCL and ABCL also
interpret it this way, but only when a modifier is present, which again, is not very consistent.
ECL interprets “omitted” as “absent” for user-defined functions, but seems to interpret it as
“empty” for built-in directives, which is not very consistent either.
Therefore, we suggest that the intended meaning of the word “omitted” in the standard really
is “empty” instead of “absent”, and again, that “conformant” implementations should behave
like CMU-CL, CCL, CLISP, Allegro and LispWorks.
3.3 Summary
To summarize, we propose to clarify section 22.3 of the Hyperspec as follows, and we suggest
that Common Lisp implementations conform to the current behavior of CMU-CL, CCL, CLISP,
Allegro and LispWorks.