zhangle 发表于 2013-1-27 04:55:21

sicp 习题 1.38 ~ 1.41

1.38
(define (cont-frac n d i k)(if (= k 1)      (/ (n 1) (d 1))      (/ (n i) (+ (d i) (cont-frac n d (+ i 1) (- k 1))))))(define (cont-frac-r n d k)(define (frac i)    (if (= i (+ k 1))      0      (/ (n i) (+ (d i) (frac (+ i 1))))))(frac 1))(define (cont-frac-i n d k)(define (frac i v)    (if (= i 0)      v      (frac (- i 1) (/ (n i) (+ (d i) v)))))(frac k 0))(cont-frac-r (lambda (i) 1.0)         (lambda (i) 1.0)         11)(define (frac n)(if (= (remainder (- n 2) 3) 0)      (* 2 (+ (/ (- n 2) 3) 1))      1))(cont-frac-r (lambda (i) 1.0)         (lambda (i)            (if (= (remainder (- i 2) 3) 0)               (* 2 (+ (/ (- i 2) 3) 1))               1))         1000)

1.39
(require (lib "math.ss"))(define (tan-cf x k)(define (d i)    (- (* 2 i) 1))(define (n i)    (if (= i 1)      x      (- (* x x))))(define (frac i)    (if (= i (+ k 1))      0      (/ (n i) (+ (d i) (frac (+ i 1))))))(frac 1))(tan-cf (/ pi 4) 10)(tan-cf (- (/ pi 4)) 10)(tan-cf (/ pi 8) 10)

1.40
(define (square x)(* x x))(define (cube x)(* x x x))(define tolerance 0.00001)(define (fixed-point f first-guess)(define (close-enough? v1 v2)    (< (abs (- v1 v2)) tolerance))(define (try guess)    (let ((next (f guess)))      ;;(newline)      ;;(display next)      (if (close-enough? guess next)          next          (try next))      ))    (try first-guess))(define (deriv g)(lambda (x)    (/ (- (g (+ x dx)) (g x))       dx)))(define dx 0.00001)(define (newton-transform g)(lambda (x)    (- x (/ (g x) ((deriv g) x)))))(define (newton-method g guess)(fixed-point (newton-transform g) guess))(define (cubic-deriv a b c)(lambda (x)    (+ (* 3 (square x)) (* 2 a x) b)))(define (cubic a b c)(lambda (x)    (+ (* (cube x)) (* a (square x)) (* b x) c)))(newton-method (cubic 1 2 3) 1);;((cubic 1 1 1) 1)

1.41
(define (double proc)(lambda (x)    (proc (proc x))))(define (inc x)(+ x 1))((double inc) 1)(((double double) inc) 1)(((double (double double)) inc) 1)
页: [1]
查看完整版本: sicp 习题 1.38 ~ 1.41