SICP 2.12

percentの実装でcenterを呼ぶのはアリかどうか。percentの計算でupper-boundかlower-boundのどちらかが2回呼ばれることになるのがちょっと気になる。でもcenterを呼ばないとwidthの実装がcenterとpercentの両方に出てくるので、それも気になる。

(define make-interval cons)
(define lower-bound car)
(define upper-bound cdr)

(define (make-center-percent c p)
  (let ((w (/ (* c p) 100.0)))
    (make-interval (- c w) (+ c w))))

(define (center i)
  (/ (+ (lower-bound i) (upper-bound i)) 2))

(define (percent i)
  (let* ((c (center i))
         (w (- (upper-bound i) c)))
    (* 100 (/ w c))))

; test
(make-center-percent 3.0 10)
(percent (make-interval 2.7 3.3))