anchor.diff:    (multiple-value-bind (length structure) (list-structure lambda-list)
       (when (eq structure :circular)
         (error 'lambda-list-must-not-be-circular
  +	     :signaler 'parse-deftype-lambda-list
   	     :code lambda-list))
       (if (eq structure :dotted)
   	(progn
   	  (when (zerop length)
   	    (error 'lambda-list-must-be-list
  +		   :signaler 'parse-deftype-lambda-list
   		   :code lambda-list))
   	  (let ((allowed '(&whole &environment &optional)))
   	    (check-lambda-list-keywords lambda-list allowed)
  
positive.code: 
  (defun parse-ordinary-lambda-list (lambda-list)
    (let ((allowed '(&optional &rest &body &key &allow-other-keys &aux)))
      (check-lambda-list-proper lambda-list)
      (check-lambda-list-keywords lambda-list allowed)
      (let ((positions (compute-keyword-positions lambda-list allowed))
  	  (result (make-instance 'lambda-list)))
  
negative.code: 	  (error 'malformed-destructuring-optional
  		 :code optional))
  	`(,(car optional)
  	  ,(if (> length 1) (cadr optional) `',default)
  	  . ,(cddr optional)))
        (progn
  	(unless (and (symbolp optional)
  		     (not (constantp optional)))
  	  (error 'malformed-destructuring-optional
  		 :code optional))
  	`(,optional ',default))))
  
  (defun parse-destructuring-optional (optional)
    (parse-destructuring/deftype-optional optional nil))
  