[ ^ CSE 341 | section index | <-- previous | next -->]

Object-oriented Scheme

Can Scheme be object-oriented? Well, for any n, the answer to the question, "Can Scheme be n?" is usually yes. Here is a simple point class:

(define (make-point x y) (lambda (method) (cond ((eq? method 'get-x) x) ((eq? method 'get-y) y) (else 'invalid-method-error)))) (define (make-point x y) ;; Equivalent (uses case for readability) (lambda (method) (case method ((get-x) x) ((get-y) y) (else 'invalid-method-error)))) ;; Usage (define my-point (make-point 1 2)) => #<procedure ...> (my-point 'get-x) => 1 (my-point 'get-y) => 2

Questions









Note: This is not quite a complete object system. To make our lives easier, a real object system would define some new special forms, using define-syntax (beyond the scope of this course). A discussion of Scheme object systems might make a good class paper.


Last modified: Wed Apr 5 22:47:35 PDT 2000