-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchapter1.scm
51 lines (47 loc) · 1.3 KB
/
chapter1.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#lang sicp
; Exercise 1.2
; Evaluates to (/ -37 150)
(/ (+ 5
4
(- 2
(- 3
(+ 6
(/ 4 5)))))
(* 3
(- 6 2)
(- 2 7)))
; Exercise 1.3
(define (sum-of-squares-of-largest x y z)
(define (square x) (* x x))
(define (sum-of-squares x y) (+ (square x) (square y)))
(cond ((and (< z x) (< z y)) (sum-of-squares x y))
((and (< y x) (< y z)) (sum-of-squares x z))
((and (< x y) (< x z)) (sum-of-squares y z))))
; Exercise 1.7
(define (sqrt x)
(define (sqrt-iter guess previous-guess x)
(if (good-enough? guess previous-guess)
guess
(sqrt-iter (improve guess x) guess x)))
(define (good-enough? guess previous-guess)
(< (abs (/ (- guess previous-guess) guess)) 0.001))
(define (improve guess x)
(average guess (/ x guess)))
(define (average x y)
(/ (+ x y) 2))
(sqrt-iter 1.0 2.0 x))
; Exercise 1.8
(define (cbrt x)
(define (cbrt-iter guess previous-guess x)
(if (good-enough? guess previous-guess)
guess
(cbrt-iter (improve guess x) guess x)))
(define (good-enough? guess previous-guess)
(< (abs (/ (- guess previous-guess) guess)) 0.001))
(define (improve guess x)
(/ (+ (/ x (square guess))
(* 2 guess))
3))
(define (square x)
(* x x))
(cbrt-iter 1.0 2.0 x))