クラス作ってみた
;; クラス定義マクロ (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
一番単純なものだとこのくらい簡単にできるんですなぁ。