sicp-lib.scm

; sicp-lib.scm
; 共通関数群

(define (abs x)
  (if (< x 0)
      (- x)
      x))

(define (square x)
  (* x x))

(define (cube x)
  (* x x x))

(define (sqrt x)
  (define (sqrt-iter old new x)
    (if (good-enough? old new)
	new
	(sqrt-iter new (improve new x) x)))
  (define (good-enough? old new)
    (< (abs (- 1.0 (/ old new))) 0.001))
  (define (improve guess x)
    (average guess (/ x guess)))
  (define (average x y)
    (/ (+ x y) 2))
  (sqrt-iter 1.0 x x))

(define (cbrt x)
  (define (cbrt-iter old new x)
    (if (good-enough? old new)
	new
	(cbrt-iter new (improve new x) x)))
  (define (good-enough? old new)
    (< (abs (- 1.0 (/ old new))) 0.001))
  (define (improve guess x)
    (/ (+ (/ x (square guess)) (* guess 2)) 3))
  (cbrt-iter 1.0 x x))