(define (average a b) (/ (+ a b) 2)) (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))) (if (close-enough? guess next) next (try next)))) (try first-guess)) (define (average-damp f) (lambda (x) (average x (f x)))) ;: ((average-damp square) 10) ;;(define (sqrt x) ;; (fixed-point (lambda (y) (average y (/ x y))) ;; 1.0)) ;;(define (sqrt x) ;; (fixed-point (average-damp (lambda (y) (/ x y))) ;; 1.0)) (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 (newtons-method g guess) (fixed-point (newton-transform g) guess)) (define (sqrt x) (newtons-method (lambda (y) (- (square y) x)) 1.0)) ;; (define (fixed-point-of-transform g transform guess) (fixed-point (transform g) guess)) ;; exercise 1.40 (define (cubic a b c) (lambda (x) (+ (cube x) (* a (square x)) (* b x) c))) ;; exercise 1.41 (define (inc x) (display 'inc:) (display x) (newline) (+ x 1)) (define (double f) (lambda (x) (display 'f:) (display x) (newline) (f (f x)))) ;; (((double (double double)) inc) 5)