(wat-aro)

無職から有職者にランクアップしました

SICP 問題 3.2

(define (make-monitored f)
  (let ((mf 0))
    (lambda (in)
      (cond ((eq? in 'how-many-calls?) mf)
            ((eq? in 'reset-count)
             (set! mf 0))
            (else (set! mf (+ 1 mf))
                  (f in))))))
gosh> (define s (make-monitored sqrt))
s
gosh> (s 100)
10
gosh> (s 'how-many-calls?)
1
gosh> (s 'reset-count)
0
gosh> (s 'how-many-calls?)
0