2016/01/29
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))