CHAPTER 3
(define (make-accumulator start) (lambda (add) (begin (set! start (+ start add)) start))) (define A (make-accumulator 3)) (A 10)
(define (sqrt x) (* x x)) (define (make-monitored f) (let ((calls 0)) (define (mf input) (cond ((eq? input 'how-many-calls?) calls) ((eq? input 'reset-count) (begin (set! calls 0) calls)) (else (begin (set! calls (+ 1 calls)) (f input))))) mf)) (define ctsqrt (make-monitored sqrt)) (ctsqrt 100) (ctsqrt 1000) (ctsqrt 10000) (ctsqrt 'how-many-calls?)
(define (make-account balance password) (let ((pw 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 m password) (cond ((not (eq? password pw)) (error "wrong password")) ((eq? m 'withdraw) withdraw) ((eq? m 'deposit) deposit) (else (error "Unknown request -- MAKE-ACCOUNT" m)))) dispatch)) (define acc (make-account 100 'opensesame)) ((acc 'deposit 'opensesame) 20) ;;(define (make-joint acct password new-pass)