simple-object


Let's have a look at a simple object in Scheme. This is simple message passing with a closure that dispatches on its first argument:

 (define (make-simple-object) 
   (let ((my-var 0)) 
     (define init 
       (lambda () 
         (set! my-var 0) 
         my-var)) 
     (define my-add 
       (lambda (x) 
         (set! my-var (+ my-var x)) 
         my-var)) 
     (define get-my-var 
       (lambda () 
          my-var)) 
     (define my-display 
       (lambda () 
         (newline) 
         (display "My Var is:") 
         (display my-var) 
         (newline))) 
     (lambda (message . args) 
       (apply (case message 
                  ((init) init) 
                  ((my-add) my-add) 
                  ((my-display) my-display) 
                  ((get-my-var) get-my-var) 
                  (else (error "Unknown Method!"))) 
              args)))) 
  
 (define a (make-simple-object))  
 (define b (make-simple-object)) 
 (a 'init) => 0 
 (b 'init) => 0 
 (a 'my-add 3) => 3 
 (a 'my-add 4) => 7 
 (a 'get-my-var) => 7 
 (b 'get-my-var) => 0 
 (a 'my-display) =>  
   My Var is: 7 

You can get a bit more serious than this, too, and roll-your-own-object-system...


category-software