anchor.diff: +(defvar *account-numbers* 1000)
  +
   (defclass bank-account (account)
  -  (customer-name
  -   balance))
  +  ((customer-name
  +    :initarg :customer-name
  +    :initform (error "Must supply a customer name."))
  +   (balance
  +    :initarg :balance
  +    :initform 0)
  +   (account-number
  +    :initform (incf *account-numbers*))
  +   account-type))
  +
  +(defmethod initialize-instance :after ((account bank-account) &key)
  +  (let ((balance (slot-value account 'balance)))
  +    (setf (slot-value account 'account-type)
  +          (cond
  +            ((>= balance 100000) :gold)
  +            ((>= balance 50000) :silver)
  +            (t :bronze)))))
   
   (defclass checking-account (bank-account) ())
   
  
positive.code: 
  (defgeneric balance (account))
  
  (defmethod ((account bank-account
    (slot-value account 'balance))
  
  (
  
  (defgeneric withdraw (account amount)
    (:documentation "Withdraw the specified AMOUNT from the ACCOUNT.
  
negative.code:       (withdraw (overdraft-account account) overdraft)
        (incf (balance account) overdraft))))
  
  (defmethod withdraw :before ((account (eql *account-of-bank-president*)) amount)
    (let ((overdraft (- amount (balance account))))
      (when (plusp overdraft)
        (incf (balance account) (embezzle *bank* overdraft)))))
  
  ;; -----------------------------------------------------------------------------
  
  