anchor.diff:       (list (if rest
                (parameter-name (lambda-list-rest-parameter self))
                '())))))
  +
  +
  +(defgeneric parameters-by-category (ll)
  +  (:method ((self lambda-list))
  +    (flet ((destructp (parameter)
  +             (typep parameter 'destructuring-lambda-list)))
  +      (let* ((mandatories (lambda-list-mandatory-parameters self))
  +             (destructs   (remove-if-not (function destructp) mandatories))
  +             (desman      '())
  +             (desopt      '())
  +             (desres      '())
  +             (deskey      '()))
  +        (dolist (destruct destructs)
  +          (multiple-value-bind (man opt res key) (parameters-by-category destruct)
  +            (setf desman (nconc desman man)
  +                  desopt (nconc desopt opt)
  +                  desres (nconc desres res)
  +                  deskey (nconc deskey key))))
  +        (values (append (remove-if (function destructp) mandatories) desman)
  +                (append (lambda-list-optional-parameters  self) desopt)
  +                (append (when (lambda-list-rest-p self)
  +                          (list (lambda-list-rest-parameter self))) desres)
  +                (append (when (lambda-list-key-p self)
  +                          (lambda-list-keyword-parameters  self)) deskey))))))
  +
  +
  +(defmethod make-flat-argument-list ((self lambda-list))
  +  "
  +
  +RETURN: A list of arguments taken from the parameters usable with apply
  +        to call a function with the same lambda-list.
  +
  +NOTE:   If no there is no &rest parameter in the lambda-list,
  +        then a NIL is put at the end of the result, for APPLY.
  +
  +NOTE:   If the lambda-list is a macro-lambda-list or a
  +        destructuring-lambda-list, some of the mandatory parameters
  +        may be sub- destructuring-lambda-lists (and recursively).  The
  +        arguments collected from those sub- lambda lists are appended
  +        after each sublist (mandatories, optionals, keywords, and
  +        rests).
  +"
  +  (let ((rest (lambda-list-rest-p self)))
  +    (multiple-value-bind (man opt res key) (parameters-by-category self)
  +      (append
  +       (mapcar (function parameter-name) man)
  +       (mapcar (function parameter-name) opt)
  +       (mapcan (lambda (par) (list (ensure-parameter-keyword par)
  +                                   (parameter-name par)))
  +               key)
  +       (mapcar (function parameter-name) res)))))
   
   
   
  
positive.code: (defgeneric parse-original-lambda-list (self))
  (defgeneric make-help (self))
  (defgeneric make-argument-list (self))
  (defgeneric make-lambda-list (self))
  
  ;;;--------------------
  
negative.code:    (when (lambda-list-allow-other-keys-p self)
       (list (cons :allow-other-keys "(other keys allowed)")))))
  
  (defmethod make-argument-list ((self lambda-list))
    "
  RETURN: A list of arguments taken from the parameters usable with apply
  