Talking about supersets...
It seems obvious that supersets can extend functions by allowing more
optional arguments or additional keywords to those already specified in
CLtL. For example, Symbolics' make-array can take a
:displaced-conformally keyword to do multidimensional displacement in a
slightly different way than specified.
That's all well and good for the function calling direction, but what
about the receiving direction? That is, we have had requests to have
GETHASH return three values instead of two, the third being the key as
stored in the hash table, which might be EQUAL but not EQ to the given
to GETHASH. This third value seems OK since most applications will only
be looking for one or two values. But what about subtle cases like
(multiple-value-list (gethash key hash-table))
or
(multiple-value-call #'list
(gethash key1 hash-table)
(gethash key2 hash-table))
where the difference is readily apparent.
Therefore, I have two questions:
Do we all agree that extra optional arguments or additional keyword
arguments are an upward compatible extension and that programs that do
not use these extensions should run on other implementations?
What about the extra values problem? Note that CLtL does not have a way
to say I want <n> values as a result of executing this form. Again,
programs that do not use the extra values will run on all
implementations, except for those places (such as the above examples)
where the extra values are visible.