-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsol-1.20.tex
47 lines (46 loc) · 1.46 KB
/
sol-1.20.tex
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
\def\steps#1{\hskip\ttindent\,\,{\typoscale[1400/]$\downarrow$}{\typoscale[850/]\quad$#1$\ evaluation\ifnum#1=1\else s\fi\ of \code{remainder}}}%
If we interpret the procedure $\mathop{\rm GCD}$ using normal-order evaluation, when evaluating the expression `(gcd 206 40)`, we generate the following process:
\begtt\scm
(gcd 206 40)
\endtt
\steps0
\begtt\scm
(gcd 40 (remainder 206 40))
\endtt
\steps1
\begtt\scm
(gcd (remainder 206 40)
(remainder 40
(remainder 206 40)))
\endtt
\steps2
\begtt\scm
(gcd (remainder 40
(remainder 206 40))
(remainder (remainder 206 40)
(remainder 40
(remainder 206 40))))
\endtt
\steps4
\begtt\scm
(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)))))
\endtt
\steps7
\begtt\scm
(remainder (remainder 206 40)
(remainder 40
(remainder 206 40)))
\endtt
\steps4
\begtt\scm
2
\endtt
Each time that $\mathop{\rm GCD}$ is applied, its second argument must be evaluated in order to test if it is zero. In total the process performs $18$ `remainder` operations.
Instead, if we use applicative-order evaluation, we need to perform only $4$ `remainder` operations.