問題3.7

(define (make-account balance password)
  (define (withdraw amount)
    (if (>= balance amount)
        (begin (set! balance (- balance amount))
               balance)
        "Insufficient funds"))
  (define (deposit amount)
    (set! balance (+ balance amount))
    balance)
  (define (dispatch pw m)
    (begin (unless (eq? pw password) (error "Incorrect password"))
           (cond ((eq? m 'withdraw) withdraw)
                 ((eq? m 'deposit) deposit)
                 (else (error "Unknown request -- MAKE-ACCOUNT" m)))))
  dispatch)

(define (make-joint account pass new-pass)
  (define (joint pw m)
    (begin (unless (eq? pw new-pass) (error "Incorrect password"))
           (account pass m)))
  (account pass 'deposit) ;accesible test
  joint)


(define peter-acc (make-account 1000 'open-sesame))
(define paul-acc (make-joint peter-acc 'open-sesame 'rosebut))

;((peter-acc 'open-sesame 'withdraw) 100)
;900
;((paul-acc 'rosebut 'withdraw) 100)
;800
;((peter-acc 'open-sesame 'withdraw) 100)
;700