オブジェクトの動き

((object 'method) args...)
という(最も単純な)構文を思いついた。Javaの構文と結構似ているような気もする。

(define make-closure
  (lambda (_x)
    (let ( (x _x) )
      (lambda (method . parameter)
        (cond ( (eq? method 'x) x)
              ( (eq? method 'setx1) (lambda (d) (set! x d)))
              ( (eq? method 'setx2) (set! x (car parameter)))
              )))))
(define num1 (make-closure 1))
(num1 'x);1
( (num1 'setx1) 2)
(num1 'x);2
(num1 'setx2 3)
(num1 'x);3