(define (new-instance class . parameters) (apply class parameters)) (define (send message object . args) (let ((method (object message))) (cond ((procedure? method) (apply method args)) (else (error "Error in method lookup " method))))) (define (point x y) (let ((x x) (y y) ) (define (getx) x) (define (gety) y) (define (add p) (point (+ x (send 'getx p)) (+ y (send 'gety p)))) (define (type-of) 'point) (define (self message) (cond ((eqv? message 'getx) getx) ((eqv? message 'gety) gety) ((eqv? message 'add) add) ((eqv? message 'type-of) type-of) (else (error "Undefined message" message)))) self))