CLHS: Section 7.6.4

#

## 7.6.4 Congruent Lambda-lists for all Methods of a Generic Function

These rules define the congruence of a set of lambda lists, including the lambda list of each method for a given generic function and the lambda list specified for the generic function itself, if given.

1. Each lambda list must have the same number of required parameters.

2. Each lambda list must have the same number of optional parameters. Each method can supply its own default for an optional parameter.

3. If any lambda list mentions `&rest` or `&key`, each lambda list must mention one or both of them.

4. If the generic function lambda list mentions `&key`, each method must accept all of the keyword names mentioned after `&key`, either by accepting them explicitly, by specifying `&allow-other-keys`, or by specifying `&rest` but not `&key`. Each method can accept additional keyword arguments of its own. The checking of the validity of keyword names is done in the generic function, not in each method. A method is invoked as if the keyword argument pair whose name is `:allow-other-keys` and whose value is true were supplied, though no such argument pair will be passed.

5. The use of `&allow-other-keys` need not be consistent across lambda lists. If `&allow-other-keys` is mentioned in the lambda list of any applicable method or of the generic function, any keyword arguments may be mentioned in the call to the generic function.

6. The use of `&aux` need not be consistent across methods.

  If a method-defining operator that cannot specify generic function options creates a generic function, and if the lambda list for the method mentions keyword arguments, the lambda list of the generic function will mention `&key` (but no keyword arguments).

Copyright 1996-2005, LispWorks Ltd. All rights reserved.