The Science of Programming/SwayPresentations/Objects/EnvironmentsAsObjects

 Environments as Objects 

If you are going to use an existing 'object' as an 'Object', then environments are a better choice.

In Scheme, environments are first-class 'objects'.

(define (account amount)      (define (deposit d) (set! amount (+ amount d)))       (define (withdraw w) (set! amount (- amount w)))       (procedure-environment (lambda  1))       )

We need the 'dot' operator:

(define (dot obj message)       (eval message obj)        )

Now, our account looks like:

(define a (account 100)) ((dot a 'withdraw) 10) ((dot a 'deposit) 20)

Next Previous Top