forked from davlxd/sicp-ex
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathex1.1-1.6-lisp-expresions.scm
62 lines (45 loc) · 1.18 KB
/
ex1.1-1.6-lisp-expresions.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
52
53
54
55
56
57
58
59
60
61
; ; Ex 1.2
; (/ (+ 5
; 4
; (- 2 (- 3 (+ 6 (/ 4 5))))
; (* 3
; (- 6 2)
; (- 2 7)))
; ; Ex1.3
; (define (sum-of-squares x y)
; (+ (* x x) (* y y)))
; (define (>= x y)
; (not (< x y)))
; (define (asdf a b c)
; (if (>= a b)
; (if (>= b c)
; (sum-of-squares a b)
; (sum-of-squares a c))
; (if (>= a c)
; (sum-of-squares b a)
; (sum-of-squares b c))))
; (asdf 2 1 3)
; Ex1.6
(define (good-enough? guess x)
(< (abs (- (* guess guess) x)) 0.001))
(define (average x y)
(/ (+ x y) 2))
(define (improve guess x)
(average guess (/ x guess)))
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause)))
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
;|
;v
(define (sqrt-iter guess x)
(cond (predicate then-clause)
(else else-clause)))
(define (sqrt-iter guess x)
(cond ((good-enough? guess x) guess)
(else (sqrt-iter (improve guess x) x))))
(sqrt-iter 1.0 10)