; ====================================================================== ; ; Structure and Interpretation of Computer Programs ; (trial answer to excercises) ; ; 计算机程序的构造和解释(习题试解) ; ; created: code17 05/30/05 ; modified: ; (保持内容完整不变前提下,可以任意转载) ; ======================================================================
;; SICP No.2.12
;; 唯一的注意事项是符号, ;; 比如当c小于0时,make-center-percent定义中make-interval中两个操作数的先后 ;; 以及如何保证percent函数的输出始终是正的。 (define (make-center-percent c p) (if (or (< p 0) (> p 1)) (error "Percentage x should satisfy 0 <= x <= 1") (let ((a (* c (+ 1.0 p))) (b (* c (- 1.0 p)))) (make-interval (min a b) (max a b)))))
(define (center i) (/ (+ (lower-bound i) (upper-bound i)) 2.0))
(define (percent i) (let ((l (lower-bound i)) (u (upper-bound i))) (/ (- u l) (abs (+ u l)))))
;; Test-it: ;; Welcome to MzScheme version 209, Copyright (c) 2004 PLT Scheme, Inc. ;; ;; ............. ;; ;; > (make-center-percent -20.0 0.1) ;; (-22.0 . -18.0) ;; > (define v (make-center-percent -20.0 0.1)) ;; > (center v) ;; -20.0 ;; > (percent v) ;; 0.1

|