]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex3_2.rkt
Solution to 4.33. This had been difficult to get right, though conceptually it was
[sicp.git] / src / sicp / ex3_2.rkt
1 #lang racket
2
3 (define (make-monitored f)
4   (let ((num-calls 0))
5     (lambda (x)
6       (cond 
7         ((eq? x 'how-many-calls?) num-calls)
8         (else 
9          (begin
10            (set! num-calls (+ num-calls 1))
11            (f x)))))))
12
13 #|
14 > (define (square x) (* x x))
15 > (square 4)
16 16
17 > (define mf (make-monitored square))
18 > (mf 'how-many-calls?)
19 0
20 > (mf 10)
21 100
22 > (mf 'how-many-calls?)
23 1
24 > (mf 100)
25 10000
26 > (mf 'how-many-calls?)
27 2
28
29 |#