問題3.1、問題3.2 – SICP(計算機プログラムの構造と解釈)その105

問題3.1

(define (make-accumulator sum)
  (lambda (n)
          (begin (set! sum (+ sum n))
                 sum)))

(define A (make-accumulator 5))

(A 10)
;gosh> 15
(A 10)
;gosh> 25

問題3.2

(define (make-monitored f)
  (let ((counter 0))
       (define (mf m)
         (cond ((eq? m 'how-many-calls?)
                counter)
               ((eq? m 'reset-count)
                (begin (set! counter 0) counter))
               (else
                 (begin (set! counter (+ counter 1)) (f m)))))
       mf))

(define s (make-monitored sqrt))
(s 100)
;gosh> 10.0
(s 'how-many-calls?)
;gosh> 1
(s 50)
;gosh> 7.0710678118654755
(s 'how-many-calls?)
;gosh> 2
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»