クラス作ってみた

;; クラス定義マクロ
(define-syntax class-gen
  (syntax-rules ()
    ((_ classname ((iv var) ...))
     (define (classname)
       (let* ((iv var) ...)
	 (let ((table `((iv . ,v) ...)))
	   (lambda (m) (cdr (assq m table)))))))))

;; 例:カウンタクラスの作成
(class-gen counter
	   ((c 0)
	    (inc (lambda () (set! c (+ c 1)) c))
	    (reset (lambda () (set! c 0) c)))) ;=> counter

;; カウンタのインスタンスと、スロット呼び出し
(define a-counter (counter))
(a-counter 'c) ;=> 0
((a-counter 'inc)) ;=> 1
((a-counter 'inc)) ;=> 2
((a-counter 'reset)) ;=> 0

一番単純なものだとこのくらい簡単にできるんですなぁ。