SICP 問題 5.18
レジスタの値をトレース出来るようにする
;;; registerがtraceを持ち,trace-onがメッセージパッシングされたらトレースする. (define (make-register name) (let ((contents '*unssaigned*) (trace (lambda (contents value) #f))) (define (dispatch message) (cond ((eq? message 'get) contents) ((eq? message 'set) (lambda (value) (trace contents value) (set! contents value))) ((eq? message 'trace-on) (set! trace (lambda (contents value) (format #t "register: ~6s oldv-value: ~s new-value: ~s\n" name contents value))) 'trace-on) ((eq? message 'trace-off) (set! trace (lambda (contents value) #f)) 'trace-off) (else (error "Unknown request -- REGISTER" message)))) dispatch))