-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathex_1_20.scm
57 lines (55 loc) · 1.96 KB
/
ex_1_20.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
(define (gcd a b)
(if (= b 0)
a
(gcd b (remainder a b))))
; Normal-order
(gcd 206 40)
;
(if (= 40 0)
206
(gcd 40 (remainder 206 40)))
;
(gcd 40 (remainder 206 40))
;
(if (= (remainder 206 40) 0)
40
(gcd (remainder 206 40) (remainder 40 (remainder 206 40))))
;
; (remainder 206 40) is computed
;
(if (= 6) 0)
40
(gcd (remainder 206 40) (remainder 40 (remainder 206 40)))
;
(gcd (remainder 206 40) (remainder 40 (remainder 206 40)))
;
(if (= (remainder 40 (remainder 206 40)) 0)
(remainder 206 40)
(gcd (remainder 40 (remainder 206 40)) (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))))
;
; (remainder 40 (remainder 206 40)) is computed, reminder is called 2 times
;
(gcd (remainder 40 (remainder 206 40)) (remainder (remainder 206 40) (remainder 40 (remainder 206 40))))
;
(if (= (remainder (remainder 206 40) (remainder 40 (remainder 206 40))) 0)
(remainder 40 (remainder 206 40))
(gcd (remainder (remainder 206 40) (remainder 40 (remainder 206 40))) (remainder (remainder 40 (remainder 206 40)) (remainder (remainder 206 40) (remainder 40 (remainder 206 40))))))
;
; (remainder (remainder 206 40) (remainder 40 (remainder 206 40))) is computed, remainder is called 4 times
;
(gcd (remainder (remainder 206 40) (remainder 40 (remainder 206 40))) (remainder (remainder 40 (remainder 206 40)) (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))))
;
(if (= (remainder (remainder 40 (remainder 206 40)) (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))) 0)
(remainder (remainder 206 40) (remainder 40 (remainder 206 40)))
...)
;
; (remainder (remainder 40 (remainder 206 40)) (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))) is computed, remainder is called 7 times
;
(remainder (remainder 206 40) (remainder 40 (remainder 206 40)))
;
; remainder is now called 4 times
;
; remainder is called, overall, 18 times
;
; In the applicative order, remainder is called only 4 times
;