;emmulating OO programing using non-functional features of Scheme (define (BankAccount balance) (define (getBalance) balance) (define (deposit amt) (set! balance (+ balance amt))) (define (withdraw amt) (set! balance (- balance amt))) (lambda (message) (cond ((eq? message 'getBalance) getBalance) ((eq? message 'deposit) deposit) ((eq? message 'withdraw) withdraw) (else (error "unknown message" message))))) ;examples from the slides > (define acct1 (BankAccount 50)) > (define acct2 (BankAccount 100)) > ((acct1 'getbalance)) 50 > ((acct2 'getbalance)) 100 > ((acct1 'withdraw) 40) > ((acct2 'deposit) 50) > ((acct1 'getbalance)) 10 > ((acct2 'getbalance)) 150 > ((acct1 'setbalance) 100)