%PDF-1.6
%âãÏÓ
1 0 obj<>
endobj
2 0 obj<>
endobj
3 0 obj<>
endobj
5 0 obj<>
endobj
7 0 obj<>
endobj
8 0 obj<>>>
endobj
9 0 obj<>
endobj
10 0 obj<><><>]/P 9 0 R/S/Article/T()/Pg 11 0 R>>
endobj
11 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
12 0 obj<>
endobj
13 0 obj[10 0 R]
endobj
14 0 obj<>/A<>/Border[0 0 0]>>
endobj
15 0 obj[14 0 R 16 0 R 17 0 R 18 0 R 22 0 R 23 0 R 24 0 R 27 0 R 29 0 R 31 0 R 33 0 R 35 0 R 37 0 R 39 0 R 41 0 R 43 0 R 45 0 R 47 0 R 49 0 R 51 0 R 53 0 R 55 0 R 57 0 R 59 0 R]
endobj
16 0 obj<>/A<>/Border[0 0 0]>>
endobj
17 0 obj<>/A<>/Border[0 0 0]>>
endobj
18 0 obj<>/A<>/Border[0 0 0]>>
endobj
19 0 obj<>
endobj
20 0 obj<>
endobj
21 0 obj[11 0 R/XYZ 0 719.2 null]
endobj
22 0 obj<>/A<>/Border[0 0 0]>>
endobj
23 0 obj<>/A<>/Border[0 0 0]>>
endobj
24 0 obj<>/A<>/Border[0 0 0]>>
endobj
25 0 obj[11 0 R/XYZ 0 443.239 null]
endobj
26 0 obj[11 0 R/XYZ 0 407.228 null]
endobj
27 0 obj<>/A<>/Border[0 0 0]>>
endobj
28 0 obj[11 0 R/XYZ 0 369.428 null]
endobj
29 0 obj<>/A<>/Border[0 0 0]>>
endobj
30 0 obj[11 0 R/XYZ 0 331.628 null]
endobj
31 0 obj<>/A<>/Border[0 0 0]>>
endobj
32 0 obj[11 0 R/XYZ 0 312.828 null]
endobj
33 0 obj<>/A<>/Border[0 0 0]>>
endobj
34 0 obj[11 0 R/XYZ 0 294.028 null]
endobj
35 0 obj<>/A<>/Border[0 0 0]>>
endobj
36 0 obj[11 0 R/XYZ 0 275.228 null]
endobj
37 0 obj<>/A<>/Border[0 0 0]>>
endobj
38 0 obj[11 0 R/XYZ 0 256.428 null]
endobj
39 0 obj<>/A<>/Border[0 0 0]>>
endobj
40 0 obj[11 0 R/XYZ 0 237.628 null]
endobj
41 0 obj<>/A<>/Border[0 0 0]>>
endobj
42 0 obj[11 0 R/XYZ 0 218.828 null]
endobj
43 0 obj<>/A<>/Border[0 0 0]>>
endobj
44 0 obj[11 0 R/XYZ 0 200.028 null]
endobj
45 0 obj<>/A<>/Border[0 0 0]>>
endobj
46 0 obj[11 0 R/XYZ 0 181.228 null]
endobj
47 0 obj<>/A<>/Border[0 0 0]>>
endobj
48 0 obj[11 0 R/XYZ 0 162.428 null]
endobj
49 0 obj<>/A<>/Border[0 0 0]>>
endobj
50 0 obj[11 0 R/XYZ 0 143.628 null]
endobj
51 0 obj<>/A<>/Border[0 0 0]>>
endobj
52 0 obj[11 0 R/XYZ 0 124.828 null]
endobj
53 0 obj<>/A<>/Border[0 0 0]>>
endobj
54 0 obj[11 0 R/XYZ 0 106.028 null]
endobj
55 0 obj<>/A<>/Border[0 0 0]>>
endobj
56 0 obj[11 0 R/XYZ 0 68.2282 null]
endobj
57 0 obj<>/A<>/Border[0 0 0]>>
endobj
58 0 obj[11 0 R/XYZ 0 49.4282 null]
endobj
59 0 obj<>/A<>/Border[0 0 0]>>
endobj
60 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
61 0 obj[60 0 R/XYZ 0 744.976 null]
endobj
62 0 obj[10 0 R]
endobj
63 0 obj<>/A<>/Border[0 0 0]>>
endobj
64 0 obj[63 0 R 66 0 R 68 0 R 70 0 R 72 0 R 74 0 R 76 0 R 78 0 R 80 0 R 82 0 R 84 0 R 86 0 R 88 0 R 90 0 R 92 0 R 94 0 R 96 0 R 98 0 R 100 0 R 102 0 R 104 0 R 106 0 R 108 0 R 110 0 R 112 0 R 114 0 R 116 0 R 118 0 R 120 0 R 122 0 R 124 0 R]
endobj
65 0 obj[60 0 R/XYZ 0 726.176 null]
endobj
66 0 obj<>/A<>/Border[0 0 0]>>
endobj
67 0 obj[60 0 R/XYZ 0 707.308 null]
endobj
68 0 obj<>/A<>/Border[0 0 0]>>
endobj
69 0 obj[60 0 R/XYZ 0 688.508 null]
endobj
70 0 obj<>/A<>/Border[0 0 0]>>
endobj
71 0 obj[60 0 R/XYZ 0 650.708 null]
endobj
72 0 obj<>/A<>/Border[0 0 0]>>
endobj
73 0 obj[60 0 R/XYZ 0 631.841 null]
endobj
74 0 obj<>/A<>/Border[0 0 0]>>
endobj
75 0 obj[60 0 R/XYZ 0 612.973 null]
endobj
76 0 obj<>/A<>/Border[0 0 0]>>
endobj
77 0 obj[60 0 R/XYZ 0 594.106 null]
endobj
78 0 obj<>/A<>/Border[0 0 0]>>
endobj
79 0 obj[60 0 R/XYZ 0 575.239 null]
endobj
80 0 obj<>/A<>/Border[0 0 0]>>
endobj
81 0 obj[60 0 R/XYZ 0 537.439 null]
endobj
82 0 obj<>/A<>/Border[0 0 0]>>
endobj
83 0 obj[60 0 R/XYZ 0 518.571 null]
endobj
84 0 obj<>/A<>/Border[0 0 0]>>
endobj
85 0 obj[60 0 R/XYZ 0 499.704 null]
endobj
86 0 obj<>/A<>/Border[0 0 0]>>
endobj
87 0 obj[60 0 R/XYZ 0 461.904 null]
endobj
88 0 obj<>/A<>/Border[0 0 0]>>
endobj
89 0 obj[60 0 R/XYZ 0 443.036 null]
endobj
90 0 obj<>/A<>/Border[0 0 0]>>
endobj
91 0 obj[60 0 R/XYZ 0 424.169 null]
endobj
92 0 obj<>/A<>/Border[0 0 0]>>
endobj
93 0 obj[60 0 R/XYZ 0 405.369 null]
endobj
94 0 obj<>/A<>/Border[0 0 0]>>
endobj
95 0 obj[60 0 R/XYZ 0 386.569 null]
endobj
96 0 obj<>/A<>/Border[0 0 0]>>
endobj
97 0 obj[60 0 R/XYZ 0 348.769 null]
endobj
98 0 obj<>/A<>/Border[0 0 0]>>
endobj
99 0 obj[60 0 R/XYZ 0 329.969 null]
endobj
100 0 obj<>/A<>/Border[0 0 0]>>
endobj
101 0 obj[60 0 R/XYZ 0 311.169 null]
endobj
102 0 obj<>/A<>/Border[0 0 0]>>
endobj
103 0 obj[60 0 R/XYZ 0 292.369 null]
endobj
104 0 obj<>/A<>/Border[0 0 0]>>
endobj
105 0 obj[60 0 R/XYZ 0 273.569 null]
endobj
106 0 obj<>/A<>/Border[0 0 0]>>
endobj
107 0 obj[60 0 R/XYZ 0 254.769 null]
endobj
108 0 obj<>/A<>/Border[0 0 0]>>
endobj
109 0 obj[60 0 R/XYZ 0 235.969 null]
endobj
110 0 obj<>/A<>/Border[0 0 0]>>
endobj
111 0 obj[60 0 R/XYZ 0 198.169 null]
endobj
112 0 obj<>/A<>/Border[0 0 0]>>
endobj
113 0 obj[60 0 R/XYZ 0 179.369 null]
endobj
114 0 obj<>/A<>/Border[0 0 0]>>
endobj
115 0 obj[60 0 R/XYZ 0 160.569 null]
endobj
116 0 obj<>/A<>/Border[0 0 0]>>
endobj
117 0 obj[60 0 R/XYZ 0 141.702 null]
endobj
118 0 obj<>/A<>/Border[0 0 0]>>
endobj
119 0 obj[60 0 R/XYZ 0 103.902 null]
endobj
120 0 obj<>/A<>/Border[0 0 0]>>
endobj
121 0 obj[60 0 R/XYZ 0 85.1016 null]
endobj
122 0 obj<>/A<>/Border[0 0 0]>>
endobj
123 0 obj[60 0 R/XYZ 0 66.2342 null]
endobj
124 0 obj<>/A<>/Border[0 0 0]>>
endobj
125 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
126 0 obj[125 0 R/XYZ 0 744.976 null]
endobj
127 0 obj[10 0 R]
endobj
128 0 obj<>/A<>/Border[0 0 0]>>
endobj
129 0 obj[128 0 R 131 0 R 133 0 R 135 0 R 137 0 R 139 0 R 141 0 R 143 0 R 145 0 R 147 0 R 149 0 R 151 0 R 153 0 R 155 0 R 159 0 R 161 0 R 163 0 R 165 0 R 167 0 R 169 0 R 171 0 R 173 0 R 175 0 R 177 0 R 179 0 R 181 0 R 183 0 R 185 0 R 187 0 R 189 0 R 191 0 R]
endobj
130 0 obj[125 0 R/XYZ 0 707.176 null]
endobj
131 0 obj<>/A<>/Border[0 0 0]>>
endobj
132 0 obj[125 0 R/XYZ 0 688.376 null]
endobj
133 0 obj<>/A<>/Border[0 0 0]>>
endobj
134 0 obj[125 0 R/XYZ 0 669.576 null]
endobj
135 0 obj<>/A<>/Border[0 0 0]>>
endobj
136 0 obj[125 0 R/XYZ 0 650.776 null]
endobj
137 0 obj<>/A<>/Border[0 0 0]>>
endobj
138 0 obj[125 0 R/XYZ 0 612.976 null]
endobj
139 0 obj<>/A<>/Border[0 0 0]>>
endobj
140 0 obj[125 0 R/XYZ 0 594.176 null]
endobj
141 0 obj<>/A<>/Border[0 0 0]>>
endobj
142 0 obj[125 0 R/XYZ 0 575.376 null]
endobj
143 0 obj<>/A<>/Border[0 0 0]>>
endobj
144 0 obj[125 0 R/XYZ 0 556.576 null]
endobj
145 0 obj<>/A<>/Border[0 0 0]>>
endobj
146 0 obj[125 0 R/XYZ 0 518.776 null]
endobj
147 0 obj<>/A<>/Border[0 0 0]>>
endobj
148 0 obj[125 0 R/XYZ 0 499.908 null]
endobj
149 0 obj<>/A<>/Border[0 0 0]>>
endobj
150 0 obj[125 0 R/XYZ 0 481.108 null]
endobj
151 0 obj<>/A<>/Border[0 0 0]>>
endobj
152 0 obj[125 0 R/XYZ 0 462.308 null]
endobj
153 0 obj<>/A<>/Border[0 0 0]>>
endobj
154 0 obj[125 0 R/XYZ 0 443.508 null]
endobj
155 0 obj<>/A<>/Border[0 0 0]>>
endobj
156 0 obj[125 0 R/XYZ 0 424.708 null]
endobj
157 0 obj<0; únode_tag_Temp_1)(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.2)]/Names[(ôlx&d‘B³Q²>0; únode_tag_Temp_1)21 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_1)28 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_10)126 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_11)130 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_12)138 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_13)146 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_14)160 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_15)174 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_16)182 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_17)190 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_2)30 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_3)56 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_4)71 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_5)81 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_6)87 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_7)97 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_8)111 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_9)119 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_A)203 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_B)213 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_C)215 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_D)223 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_E)225 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_F)227 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_Temp_2)26 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_11.1)132 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_11.2)134 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_11.3)136 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_12.1)140 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_12.2)142 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_12.3)144 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_13.1)148 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_13.2)150 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_13.3)152 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_13.4)154 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_13.4.1)156 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.1)162 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.2)164 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.3)166 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.4)168 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.4.1)170 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.4.2)172 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_15.1)176 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_15.2)178 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_15.3)180 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_16.1)184 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_16.2)186 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_16.3)188 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_17.1)193 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_17.2)197 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_17.3)199 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_17.4)201 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.1)32 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.1.1)34 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.1.2)36 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.1.3)38 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.1.4)40 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.2)42 0 R]>>
endobj
158 0 obj<0; únode_toc_node_sec_2.2.1)(ôlx&d‘B³Q²>0; únode_toc_start)]/Names[(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.2.1)44 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.2.2)46 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.2.3)48 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.2.4)50 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.3)52 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.4)54 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_3.1)58 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_3.1.1)61 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_3.1.2)65 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_3.2)67 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_3.3)69 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_4.1)73 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_4.2)75 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_4.3)77 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_4.4)79 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_5.1)83 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_5.2)85 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_6.1)89 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_6.2)91 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_6.3)93 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_6.4)95 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_7.1)99 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_7.2)101 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_7.3)103 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_7.3.1)105 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_7.4)107 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_7.5)109 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_8.1)113 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_8.2)115 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_8.3)117 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_9.1)121 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_9.2)123 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_A.1)205 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_A.2)207 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_A.3)209 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_A.4)211 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_C.1)217 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_C.2)219 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_C.3)221 0 R(ôlx&d‘B³Q²>0; únode_toc_start)25 0 R]>>
endobj
159 0 obj<>/A<>/Border[0 0 0]>>
endobj
160 0 obj[125 0 R/XYZ 0 386.908 null]
endobj
161 0 obj<>/A<>/Border[0 0 0]>>
endobj
162 0 obj[125 0 R/XYZ 0 368.041 null]
endobj
163 0 obj<>/A<>/Border[0 0 0]>>
endobj
164 0 obj[125 0 R/XYZ 0 349.173 null]
endobj
165 0 obj<>/A<>/Border[0 0 0]>>
endobj
166 0 obj[125 0 R/XYZ 0 330.306 null]
endobj
167 0 obj<>/A<>/Border[0 0 0]>>
endobj
168 0 obj[125 0 R/XYZ 0 311.506 null]
endobj
169 0 obj<>/A<>/Border[0 0 0]>>
endobj
170 0 obj[125 0 R/XYZ 0 292.706 null]
endobj
171 0 obj<>/A<>/Border[0 0 0]>>
endobj
172 0 obj[125 0 R/XYZ 0 273.906 null]
endobj
173 0 obj<>/A<>/Border[0 0 0]>>
endobj
174 0 obj[125 0 R/XYZ 0 236.106 null]
endobj
175 0 obj<>/A<>/Border[0 0 0]>>
endobj
176 0 obj[125 0 R/XYZ 0 217.306 null]
endobj
177 0 obj<>/A<>/Border[0 0 0]>>
endobj
178 0 obj[125 0 R/XYZ 0 198.506 null]
endobj
179 0 obj<>/A<>/Border[0 0 0]>>
endobj
180 0 obj[125 0 R/XYZ 0 179.706 null]
endobj
181 0 obj<>/A<>/Border[0 0 0]>>
endobj
182 0 obj[125 0 R/XYZ 0 141.906 null]
endobj
183 0 obj<>/A<>/Border[0 0 0]>>
endobj
184 0 obj[125 0 R/XYZ 0 123.106 null]
endobj
185 0 obj<>/A<>/Border[0 0 0]>>
endobj
186 0 obj[125 0 R/XYZ 0 104.306 null]
endobj
187 0 obj<>/A<>/Border[0 0 0]>>
endobj
188 0 obj[125 0 R/XYZ 0 85.506 null]
endobj
189 0 obj<>/A<>/Border[0 0 0]>>
endobj
190 0 obj[125 0 R/XYZ 0 47.706 null]
endobj
191 0 obj<>/A<>/Border[0 0 0]>>
endobj
192 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
193 0 obj[192 0 R/XYZ 0 744.976 null]
endobj
194 0 obj[10 0 R]
endobj
195 0 obj<>/A<>/Border[0 0 0]>>
endobj
196 0 obj[195 0 R 198 0 R 200 0 R 202 0 R 204 0 R 206 0 R 208 0 R 210 0 R 212 0 R 214 0 R 216 0 R 218 0 R 220 0 R 222 0 R 224 0 R 226 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R]
endobj
197 0 obj[192 0 R/XYZ 0 726.176 null]
endobj
198 0 obj<>/A<>/Border[0 0 0]>>
endobj
199 0 obj[192 0 R/XYZ 0 707.376 null]
endobj
200 0 obj<>/A<>/Border[0 0 0]>>
endobj
201 0 obj[192 0 R/XYZ 0 688.576 null]
endobj
202 0 obj<>/A<>/Border[0 0 0]>>
endobj
203 0 obj[192 0 R/XYZ 0 650.776 null]
endobj
204 0 obj<>/A<>/Border[0 0 0]>>
endobj
205 0 obj[192 0 R/XYZ 0 631.976 null]
endobj
206 0 obj<>/A<>/Border[0 0 0]>>
endobj
207 0 obj[192 0 R/XYZ 0 613.176 null]
endobj
208 0 obj<>/A<>/Border[0 0 0]>>
endobj
209 0 obj[192 0 R/XYZ 0 594.308 null]
endobj
210 0 obj<>/A<>/Border[0 0 0]>>
endobj
211 0 obj[192 0 R/XYZ 0 575.441 null]
endobj
212 0 obj<>/A<>/Border[0 0 0]>>
endobj
213 0 obj[192 0 R/XYZ 0 537.641 null]
endobj
214 0 obj<>/A<>/Border[0 0 0]>>
endobj
215 0 obj[192 0 R/XYZ 0 499.841 null]
endobj
216 0 obj<>/A<>/Border[0 0 0]>>
endobj
217 0 obj[192 0 R/XYZ 0 481.041 null]
endobj
218 0 obj<>/A<>/Border[0 0 0]>>
endobj
219 0 obj[192 0 R/XYZ 0 462.241 null]
endobj
220 0 obj<>/A<>/Border[0 0 0]>>
endobj
221 0 obj[192 0 R/XYZ 0 443.441 null]
endobj
222 0 obj<>/A<>/Border[0 0 0]>>
endobj
223 0 obj[192 0 R/XYZ 0 405.641 null]
endobj
224 0 obj<>/A<>/Border[0 0 0]>>
endobj
225 0 obj[192 0 R/XYZ 0 367.841 null]
endobj
226 0 obj<>/A<>/Border[0 0 0]>>
endobj
227 0 obj[192 0 R/XYZ 0 330.041 null]
endobj
228 0 obj<>/A<>/Border[0 0 0]>>
endobj
229 0 obj<>/A<>/Border[0 0 0]>>
endobj
230 0 obj<>/A<>/Border[0 0 0]>>
endobj
231 0 obj<>/A<>/Border[0 0 0]>>
endobj
232 0 obj<>/A<>/Border[0 0 0]>>
endobj
233 0 obj<>
endobj
234 0 obj<>
endobj
235 0 obj<>
endobj
236 0 obj<>
endobj
237 0 obj<>
endobj
238 0 obj<>
endobj
239 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days)Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
BT
/T1_1 1 Tf
14 0 0 14 271.014 744.9756 Tm
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 743.06 m
334.028 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 311.46 744.9756 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 743.06 m
389.244 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 341.028 744.9756 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 743.06 m
419.568 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 396.244 744.9756 Tm
(next)Tj
1 0 0 rg
( page; )Tj
0.502 0.502 0.502 rg
(contents; )Tj
ET
527.27 743.06 m
557.594 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 527.27 744.9756 Tm
(index)Tj
1 0 0 rg
(])Tj
0 0 0 rg
/T1_2 1 Tf
28 0 0 28 306 697.4659 Tm
( )Tj
0 -1 TD
( )Tj
-8.919 -1.1 Td
(Teach Yourself Scheme in Fixnum Days)Tj
/T1_0 1 Tf
14 0 0 14 222.133 598.5756 Tm
( \251 )Tj
ET
0.706 w
239.773 596.459 m
318.705 596.459 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 239.773 598.5756 Tm
(Dorai Sitaram)Tj
0 0 0 rg
(, 1998-2004 )Tj
0.425 -1.343 Td
( All Rights Reserved )Tj
0.117 -1.205 Td
( )Tj
/T1_3 1 Tf
(ds26)Tj
/T1_0 1 Tf
( )Tj
/T1_1 1 Tf
(at)Tj
/T1_0 1 Tf
( )Tj
/T1_3 1 Tf
(gte.com)Tj
/T1_0 1 Tf
( )Tj
-8.448 -1.2 Td
( )Tj
ET
132.582 543.991 m
306.378 543.991 l
S
0.638 w
306.378 544.193 m
321.162 544.193 l
S
0.706 w
321.162 543.991 m
479.418 543.991 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 132.582 546.1082 Tm
([Download archive containing )Tj
/T1_1 1 Tf
(all)Tj
/T1_0 1 Tf
( the pages of this document])Tj
0 0 0 rg
( )Tj
3.625 -1.343 Td
( )Tj
ET
186.832 525.191 m
425.168 525.191 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 186.832 527.3082 Tm
([Download TeX source for this document])Tj
0 0 0 rg
( )Tj
2.458 -1.343 Td
( Cover art by Margaret Wong )Tj
-12.306 -2.457 Td
( )Tj
T*
( )Tj
/T1_4 1 Tf
15.4 0 0 15.4 48.96 443.2389 Tm
(Contents )Tj
/T1_5 1 Tf
14 0 0 14 48.96 407.2282 Tm
( )Tj
ET
1.168 w
62.96 403.725 m
108.04 403.725 l
S
0 0 1 rg
BT
/T1_5 1 Tf
14 0 0 14 62.96 407.2282 Tm
(Preface)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_5 1 Tf
-1 -2.7 Td
( )Tj
ET
62.96 365.925 m
160.554 365.925 l
S
0 0 1 rg
BT
/T1_5 1 Tf
14 0 0 14 62.96 369.4282 Tm
(1 Enter Scheme)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_5 1 Tf
-1 -2.7 Td
( )Tj
ET
62.96 328.125 m
140.338 328.125 l
S
0 0 1 rg
BT
/T1_5 1 Tf
14 0 0 14 62.96 331.6282 Tm
(2 Data types)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 310.711 m
201.014 310.711 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 312.8282 Tm
(2.1 Simple data types)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
90.96 291.911 m
178.068 291.911 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 294.0282 Tm
(2.1.1 Booleans)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
90.96 273.111 m
177.284 273.111 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 275.2282 Tm
(2.1.2 Numbers)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
90.96 254.311 m
185.824 254.311 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 256.4282 Tm
(2.1.3 Characters)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
90.96 235.511 m
174.974 235.511 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 237.6282 Tm
(2.1.4 Symbols)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
76.96 216.711 m
223.568 216.711 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 218.8282 Tm
(2.2 Compound data types)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
90.96 197.911 m
165.636 197.911 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 200.0282 Tm
(2.2.1 Strings)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
90.96 179.111 m
169.5 179.111 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 181.2282 Tm
(2.2.2 Vectors)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
90.96 160.311 m
244.568 160.311 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 162.4282 Tm
(2.2.3 Dotted pairs and lists)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
90.96 141.511 m
305.986 141.511 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 143.6282 Tm
(2.2.4 Conversions between data types)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
76.96 122.711 m
193.216 122.711 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 124.8282 Tm
(2.3 Other data types)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 103.911 m
179.23 103.911 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 106.0282 Tm
(2.4 S-expressions)Tj
0 0 0 rg
( )Tj
/T1_5 1 Tf
-2 -2.7 Td
( )Tj
ET
1.168 w
62.96 64.725 m
115.838 64.725 l
S
0 0 1 rg
BT
/T1_5 1 Tf
14 0 0 14 62.96 68.2282 Tm
(3 Forms)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 47.311 m
163.662 47.311 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 49.4282 Tm
(3.1 Procedures)Tj
0 0 0 rg
( )Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-1.html \(1 o\
f 4\)11/3/2006 8:41:52 PM)Tj
ET
EMC
endstream
endobj
240 0 obj<>
endobj
241 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days)Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
14 0 0 14 48.96 744.9756 Tm
( )Tj
ET
0 0 1 RG
0.706 w 10 M 0 j 0 J []0 d
90.96 742.859 m
247.634 742.859 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 744.9756 Tm
(3.1.1 Procedure parameters)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
90.96 724.059 m
297.418 724.059 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 726.1756 Tm
(3.1.2 Variable number of arguments)Tj
0 0 0 rg
( )Tj
-3 -1.348 Td
( )Tj
ET
76.96 705.191 m
101.46 705.191 l
S
0 0 0.502 RG
0.428 w
101.46 706.023 m
143.46 706.023 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 707.3082 Tm
(3.2 )Tj
0 0 0.502 rg
/T1_1 1 Tf
(apply)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-2 -1.343 Td
( )Tj
ET
0 0 1 RG
0.706 w
76.96 686.391 m
166.784 686.391 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 688.5082 Tm
(3.3 Sequencing)Tj
0 0 0 rg
( )Tj
/T1_2 1 Tf
-2 -2.7 Td
( )Tj
ET
1.168 w
62.96 647.205 m
153.204 647.205 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 62.96 650.7082 Tm
(4 Conditionals)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.348 Td
( )Tj
ET
0.706 w
76.96 629.724 m
101.46 629.724 l
S
0.6 0 0 RG
101.46 629.724 m
135.06 629.724 l
S
0 0 1 RG
135.06 629.724 m
162.276 629.724 l
S
0.6 0 0 RG
162.276 629.724 m
212.676 629.724 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 631.8408 Tm
(4.1 )Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0 0 1 rg
/T1_0 1 Tf
( and )Tj
0.6 0 0 rg
/T1_3 1 Tf
(unless)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-2 -1.348 Td
( )Tj
ET
0 0 1 RG
76.96 610.857 m
101.46 610.857 l
S
0.6 0 0 RG
101.46 610.857 m
135.06 610.857 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 612.9734 Tm
(4.2 )Tj
0.6 0 0 rg
/T1_3 1 Tf
(cond)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-2 -1.348 Td
( )Tj
ET
0 0 1 RG
76.96 591.989 m
101.46 591.989 l
S
0.6 0 0 RG
101.46 591.989 m
135.06 591.989 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 594.106 Tm
(4.3 )Tj
0.6 0 0 rg
/T1_3 1 Tf
(case)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-2 -1.348 Td
( )Tj
ET
0 0 1 RG
76.96 573.122 m
101.46 573.122 l
S
0.6 0 0 RG
101.46 573.122 m
126.66 573.122 l
S
0 0 1 RG
126.66 573.122 m
153.876 573.122 l
S
0.6 0 0 RG
153.876 573.122 m
170.676 573.122 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 575.2386 Tm
(4.4 )Tj
0.6 0 0 rg
/T1_3 1 Tf
(and)Tj
0 0 1 rg
/T1_0 1 Tf
( and )Tj
0.6 0 0 rg
/T1_3 1 Tf
(or)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_2 1 Tf
-2 -2.7 Td
( )Tj
ET
0 0 1 RG
1.168 w
62.96 533.936 m
178.46 533.936 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 62.96 537.4386 Tm
(5 Lexical variables)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.348 Td
( )Tj
ET
0.706 w
76.96 516.454 m
101.46 516.454 l
S
0.6 0 0 RG
101.46 516.454 m
126.66 516.454 l
S
0 0 1 RG
126.66 516.454 m
153.876 516.454 l
S
0.6 0 0 RG
153.876 516.454 m
187.476 516.454 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 518.5712 Tm
(5.1 )Tj
0.6 0 0 rg
/T1_3 1 Tf
(let)Tj
0 0 1 rg
/T1_0 1 Tf
( and )Tj
0.6 0 0 rg
/T1_3 1 Tf
(let*)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-2 -1.348 Td
( )Tj
ET
0 0 1 RG
76.96 497.587 m
101.46 497.587 l
S
0.6 0 0 RG
101.46 497.587 m
177.06 497.587 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 499.7038 Tm
(5.2 )Tj
0.6 0 0 rg
/T1_3 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_2 1 Tf
-2 -2.7 Td
( )Tj
ET
0 0 1 RG
1.168 w
62.96 458.401 m
137.622 458.401 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 62.96 461.9038 Tm
(6 Recursion)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.348 Td
( )Tj
ET
0.706 w
76.96 440.92 m
101.46 440.92 l
S
0.6 0 0 RG
101.46 440.92 m
151.86 440.92 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 443.0364 Tm
(6.1 )Tj
0.6 0 0 rg
/T1_3 1 Tf
(letrec)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-2 -1.348 Td
( )Tj
ET
0 0 1 RG
76.96 422.052 m
145.392 422.052 l
S
0.6 0 0 RG
145.392 422.052 m
170.592 422.052 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 424.169 Tm
(6.2 Named )Tj
0.6 0 0 rg
/T1_3 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-2 -1.343 Td
( )Tj
ET
0 0 1 RG
76.96 403.252 m
148.892 403.252 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 405.369 Tm
(6.3 Iteration)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 384.452 m
290.026 384.452 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 386.569 Tm
(6.4 Mapping a procedure across a list)Tj
0 0 0 rg
( )Tj
/T1_2 1 Tf
-2 -2.7 Td
( )Tj
ET
1.168 w
62.96 345.266 m
97.19 345.266 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 62.96 348.769 Tm
(7 I/O)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 327.852 m
148.122 327.852 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 329.969 Tm
(7.1 Reading)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 309.052 m
145.014 309.052 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 311.169 Tm
(7.2 Writing)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 290.252 m
154.744 290.252 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 292.369 Tm
(7.3 File ports)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
90.96 271.452 m
370.162 271.452 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 273.569 Tm
(7.3.1 Automatic opening and closing of file ports)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
76.96 252.652 m
167.19 252.652 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 254.769 Tm
(7.4 String ports)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 233.852 m
175.73 233.852 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 235.969 Tm
(7.5 Loading files)Tj
0 0 0 rg
( )Tj
/T1_2 1 Tf
-2 -2.7 Td
( )Tj
ET
1.168 w
62.96 194.666 m
122.054 194.666 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 62.96 198.169 Tm
(8 Macros)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 177.252 m
319.594 177.252 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 179.369 Tm
(8.1 Specifying the expansion as a template)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 158.452 m
328.526 158.452 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 160.569 Tm
(8.2 Avoiding variable capture inside macros)Tj
0 0 0 rg
( )Tj
-2 -1.348 Td
( )Tj
ET
76.96 139.585 m
101.46 139.585 l
S
0.6 0 0 RG
101.46 139.585 m
177.06 139.585 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 141.7016 Tm
(8.3 )Tj
0.6 0 0 rg
/T1_3 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_2 1 Tf
-2 -2.7 Td
( )Tj
ET
0 0 1 RG
1.168 w
62.96 100.399 m
139.946 100.399 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 62.96 103.9016 Tm
(9 Structures)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 82.985 m
223.176 82.985 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 85.1016 Tm
(9.1 Default initializations)Tj
0 0 0 rg
( )Tj
-2 -1.348 Td
( )Tj
ET
76.96 64.117 m
101.46 64.117 l
S
0.6 0 0 RG
101.46 64.117 m
177.06 64.117 l
S
0 0 1 RG
177.06 64.117 m
222.546 64.117 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 66.2342 Tm
(9.2 )Tj
0.6 0 0 rg
/T1_3 1 Tf
(defstruct)Tj
0 0 1 rg
/T1_0 1 Tf
( defined)Tj
0 0 0 rg
( )Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-1.html \(2 o\
f 4\)11/3/2006 8:41:52 PM)Tj
ET
EMC
endstream
endobj
242 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days)Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_1 1 Tf
14 0 0 14 48.96 744.9756 Tm
( )Tj
ET
0 0 1 RG
1.168 w 10 M 0 j 0 J []0 d
62.96 741.473 m
181.974 741.473 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 744.9756 Tm
(10 Alists and tables)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_1 1 Tf
-1 -2.7 Td
( )Tj
ET
62.96 703.673 m
183.094 703.673 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 707.1756 Tm
(11 System interface)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 686.259 m
281.878 686.259 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 688.3755 Tm
(11.1 Checking for and deleting files)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 667.459 m
313.784 667.459 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 669.5756 Tm
(11.2 Calling operating-system commands)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 648.659 m
235.608 648.659 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 650.7756 Tm
(11.3 Environment variables)Tj
0 0 0 rg
( )Tj
/T1_1 1 Tf
-2 -2.7 Td
( )Tj
ET
1.168 w
62.96 609.473 m
199.068 609.473 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 612.9756 Tm
(12 Objects and classes)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 592.059 m
239.514 592.059 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 594.1756 Tm
(12.1 A simple object system)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 573.259 m
247.27 573.259 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 575.3755 Tm
(12.2 Classes are instances too)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 554.459 m
222.392 554.459 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 556.5756 Tm
(12.3 Multiple inheritance)Tj
0 0 0 rg
( )Tj
/T1_1 1 Tf
-2 -2.7 Td
( )Tj
ET
1.168 w
62.96 515.273 m
123.636 515.273 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 518.7756 Tm
(13 Jumps)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.348 Td
( )Tj
ET
0.706 w
76.96 497.791 m
108.46 497.791 l
S
0 0 0.502 RG
0.428 w
108.46 498.623 m
360.46 498.623 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 499.9082 Tm
(13.1 )Tj
0 0 0.502 rg
/T1_2 1 Tf
(call-with-current-continuation)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-2 -1.343 Td
( )Tj
ET
0 0 1 RG
0.706 w
76.96 478.991 m
238.73 478.991 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 481.1082 Tm
(13.2 Escaping continuations)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 460.191 m
189.716 460.191 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 462.3082 Tm
(13.3 Tree matching)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 441.391 m
169.906 441.391 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 443.5082 Tm
(13.4 Coroutines)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
90.96 422.591 m
305.594 422.591 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 424.7082 Tm
(13.4.1 Tree-matching with coroutines)Tj
0 0 0 rg
( )Tj
/T1_1 1 Tf
-3 -2.7 Td
( )Tj
ET
1.168 w
62.96 383.405 m
184.284 383.405 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 386.9082 Tm
(14 Nondeterminism)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.348 Td
( )Tj
ET
0.706 w
76.96 365.924 m
192.446 365.924 l
S
0.6 0 0 RG
192.446 365.924 m
217.646 365.924 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 368.0408 Tm
(14.1 Description of )Tj
0.6 0 0 rg
/T1_3 1 Tf
(amb)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-2 -1.348 Td
( )Tj
ET
0 0 1 RG
76.96 347.057 m
190.514 347.057 l
S
0.6 0 0 RG
190.514 347.057 m
215.714 347.057 l
S
0 0 1 RG
215.714 347.057 m
277.93 347.057 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 349.1734 Tm
(14.2 Implementing )Tj
0.6 0 0 rg
/T1_3 1 Tf
(amb)Tj
0 0 1 rg
/T1_0 1 Tf
( in Scheme)Tj
0 0 0 rg
( )Tj
-2 -1.348 Td
( )Tj
ET
76.96 328.189 m
145.406 328.189 l
S
0.6 0 0 RG
145.406 328.189 m
170.606 328.189 l
S
0 0 1 RG
170.606 328.189 m
232.822 328.189 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 330.306 Tm
(14.3 Using )Tj
0.6 0 0 rg
/T1_3 1 Tf
(amb)Tj
0 0 1 rg
/T1_0 1 Tf
( in Scheme)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 309.389 m
186.608 309.389 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 311.506 Tm
(14.4 Logic puzzles)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
90.96 290.589 m
242.594 290.589 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 292.706 Tm
(14.4.1 The Kalotan puzzle)Tj
0 0 0 rg
( )Tj
-3 -1.343 Td
( )Tj
ET
90.96 271.789 m
208.784 271.789 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 90.96 273.906 Tm
(14.4.2 Map coloring)Tj
0 0 0 rg
( )Tj
/T1_1 1 Tf
-3 -2.7 Td
( )Tj
ET
1.168 w
62.96 232.603 m
131.42 232.603 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 236.106 Tm
(15 Engines)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 215.189 m
164.054 215.189 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 217.306 Tm
(15.1 The clock)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 196.389 m
176.514 196.389 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 198.506 Tm
(15.2 Flat engines)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 177.589 m
203.716 177.589 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 179.706 Tm
(15.3 Nestable engines)Tj
0 0 0 rg
( )Tj
/T1_1 1 Tf
-2 -2.7 Td
( )Tj
ET
1.168 w
62.96 138.403 m
156.69 138.403 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 141.906 Tm
(16 Shell scripts)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 120.989 m
224.324 120.989 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 123.106 Tm
(16.1 Hello, World!, again)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 102.189 m
237.568 102.189 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 104.306 Tm
(16.2 Scripts with arguments)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 83.389 m
158.23 83.389 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 85.506 Tm
(16.3 Example)Tj
0 0 0 rg
( )Tj
/T1_1 1 Tf
-2 -2.7 Td
( )Tj
ET
1.168 w
62.96 44.203 m
153.568 44.203 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 47.706 Tm
(17 CGI scripts)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-1.html \(3 o\
f 4\)11/3/2006 8:41:52 PM)Tj
ET
EMC
endstream
endobj
243 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days)Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
14 0 0 14 48.96 744.9756 Tm
( )Tj
ET
0 0 1 RG
0.706 w 10 M 0 j 0 J []0 d
76.96 742.859 m
355.378 742.859 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 744.9756 Tm
(17.1 Example: Displaying environment variables)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 724.059 m
398.526 724.059 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 726.1756 Tm
(17.2 Example: Displaying selected environment variable)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 705.259 m
212.69 705.259 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 707.3755 Tm
(17.3 CGI script utilities)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 686.459 m
225.486 686.459 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 688.5756 Tm
(17.4 A calculator via CGI)Tj
0 0 0 rg
( )Tj
/T1_1 1 Tf
-2 -2.7 Td
( )Tj
ET
1.168 w
62.96 647.273 m
174.554 647.273 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 650.7756 Tm
(A Scheme dialects)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 629.859 m
237.946 629.859 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 631.9756 Tm
(A.1 Invocation and init files)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 611.059 m
173.406 611.059 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 613.1756 Tm
(A.2 Shell scripts)Tj
0 0 0 rg
( )Tj
-2 -1.348 Td
( )Tj
ET
76.96 592.191 m
104.568 592.191 l
S
0.6 0 0 RG
104.568 592.191 m
205.368 592.191 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 594.3082 Tm
(A.3 )Tj
0.6 0 0 rg
/T1_2 1 Tf
(define-macro)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-2 -1.348 Td
( )Tj
ET
0 0 1 RG
76.96 573.324 m
104.568 573.324 l
S
0 0 0.502 RG
0.428 w
104.568 574.156 m
213.768 574.156 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 575.4408 Tm
(A.4 )Tj
0 0 0.502 rg
/T1_3 1 Tf
(load-relative)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_1 1 Tf
-2 -2.7 Td
( )Tj
ET
0 0 1 RG
1.168 w
62.96 534.138 m
237.19 534.138 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 537.6408 Tm
(B DOS batch files in Scheme)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_1 1 Tf
-1 -2.7 Td
( )Tj
ET
62.96 496.338 m
210.338 496.338 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 499.8408 Tm
(C Numerical techniques)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-1 -1.343 Td
( )Tj
ET
0.706 w
76.96 478.924 m
186.048 478.924 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 481.0408 Tm
(C.1 Simpson's rule)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 460.124 m
232.108 460.124 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 462.2408 Tm
(C.2 Adaptive interval sizes)Tj
0 0 0 rg
( )Tj
-2 -1.343 Td
( )Tj
ET
76.96 441.324 m
207.608 441.324 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 76.96 443.4408 Tm
(C.3 Improper integrals)Tj
0 0 0 rg
( )Tj
/T1_1 1 Tf
-2 -2.7 Td
( )Tj
ET
1.168 w
62.96 402.138 m
193.23 402.138 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 405.6408 Tm
(D A clock for infinity)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_1 1 Tf
-1 -2.7 Td
( )Tj
ET
62.96 364.338 m
144.594 364.338 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 367.8408 Tm
(E References)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_1 1 Tf
-1 -2.7 Td
( )Tj
ET
62.96 326.538 m
112.744 326.538 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 62.96 330.0408 Tm
(F Index)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
1 0 0 rg
/T1_4 1 Tf
14.861 -2.7 Td
([Go to )Tj
ET
0.638 w
311.46 290.326 m
334.028 290.326 l
S
0 0 1 rg
BT
/T1_4 1 Tf
14 0 0 14 311.46 292.2408 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 290.326 m
389.244 290.326 l
S
0 0 1 rg
BT
/T1_4 1 Tf
14 0 0 14 341.028 292.2408 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 290.326 m
419.568 290.326 l
S
0 0 1 rg
BT
/T1_4 1 Tf
14 0 0 14 396.244 292.2408 Tm
(next)Tj
1 0 0 rg
( page; )Tj
0.502 0.502 0.502 rg
(contents; )Tj
ET
527.27 290.326 m
557.594 290.326 l
S
0 0 1 rg
BT
/T1_4 1 Tf
14 0 0 14 527.27 292.2408 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-1.html \(4 o\
f 4\)11/3/2006 8:41:52 PM)Tj
ET
EMC
endstream
endobj
244 0 obj(Teach Yourself Scheme in Fixnum Days)
endobj
245 0 obj<>
endobj
246 0 obj<>
endobj
247 0 obj<>
endobj
248 0 obj<>
endobj
249 0 obj[246 0 R]
endobj
250 0 obj(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-1.html)
endobj
251 0 obj(ôlx&d‘B³Q²>0; ú)
endobj
252 0 obj<>
endobj
253 0 obj<>
endobj
254 0 obj(y;ºîF=äu©¬Î|||y)
endobj
255 0 obj<>
endobj
256 0 obj<>
endobj
257 0 obj<>
endobj
258 0 obj<>
endobj
259 0 obj<>stream
2006-11-03T20:41:52-08:00
2006-11-03T20:41:51-08:00
2006-11-03T20:41:52-08:00
application/pdf
Teach Yourself Scheme in Fixnum Days
uuid:90dd6a4f-afaa-4e82-95ac-05936493cd06
uuid:f1060f11-24fd-4be1-b3d4-380d01473fbc
Acrobat Web Capture 7.0
endstream
endobj
xref
0 260
0000000004 65535 f
0000000016 00000 n
0000000145 00000 n
0000000219 00000 n
0000000006 00000 f
0000000387 00000 n
0000000000 00001 f
0000000455 00000 n
0000000555 00000 n
0000000599 00000 n
0000000646 00000 n
0000000805 00000 n
0000001056 00000 n
0000001120 00000 n
0000001144 00000 n
0000001329 00000 n
0000001514 00000 n
0000001700 00000 n
0000001892 00000 n
0000002101 00000 n
0000002159 00000 n
0000002201 00000 n
0000002242 00000 n
0000002397 00000 n
0000002594 00000 n
0000002786 00000 n
0000002829 00000 n
0000002872 00000 n
0000003082 00000 n
0000003125 00000 n
0000003331 00000 n
0000003374 00000 n
0000003580 00000 n
0000003623 00000 n
0000003830 00000 n
0000003873 00000 n
0000004082 00000 n
0000004125 00000 n
0000004334 00000 n
0000004377 00000 n
0000004586 00000 n
0000004629 00000 n
0000004838 00000 n
0000004881 00000 n
0000005088 00000 n
0000005131 00000 n
0000005340 00000 n
0000005383 00000 n
0000005590 00000 n
0000005633 00000 n
0000005842 00000 n
0000005885 00000 n
0000006094 00000 n
0000006137 00000 n
0000006344 00000 n
0000006387 00000 n
0000006593 00000 n
0000006636 00000 n
0000006842 00000 n
0000006885 00000 n
0000007092 00000 n
0000007317 00000 n
0000007360 00000 n
0000007384 00000 n
0000007589 00000 n
0000007836 00000 n
0000007879 00000 n
0000008084 00000 n
0000008127 00000 n
0000008331 00000 n
0000008374 00000 n
0000008581 00000 n
0000008624 00000 n
0000008830 00000 n
0000008873 00000 n
0000009080 00000 n
0000009123 00000 n
0000009329 00000 n
0000009372 00000 n
0000009577 00000 n
0000009620 00000 n
0000009826 00000 n
0000009869 00000 n
0000010074 00000 n
0000010117 00000 n
0000010324 00000 n
0000010367 00000 n
0000010573 00000 n
0000010616 00000 n
0000010822 00000 n
0000010865 00000 n
0000011071 00000 n
0000011114 00000 n
0000011321 00000 n
0000011364 00000 n
0000011571 00000 n
0000011614 00000 n
0000011821 00000 n
0000011864 00000 n
0000012068 00000 n
0000012111 00000 n
0000012319 00000 n
0000012363 00000 n
0000012571 00000 n
0000012615 00000 n
0000012823 00000 n
0000012867 00000 n
0000013077 00000 n
0000013121 00000 n
0000013328 00000 n
0000013372 00000 n
0000013579 00000 n
0000013623 00000 n
0000013831 00000 n
0000013875 00000 n
0000014084 00000 n
0000014128 00000 n
0000014337 00000 n
0000014381 00000 n
0000014589 00000 n
0000014633 00000 n
0000014840 00000 n
0000014884 00000 n
0000015093 00000 n
0000015137 00000 n
0000015346 00000 n
0000015573 00000 n
0000015618 00000 n
0000015643 00000 n
0000015848 00000 n
0000016114 00000 n
0000016159 00000 n
0000016364 00000 n
0000016409 00000 n
0000016615 00000 n
0000016660 00000 n
0000016866 00000 n
0000016911 00000 n
0000017117 00000 n
0000017162 00000 n
0000017367 00000 n
0000017412 00000 n
0000017618 00000 n
0000017663 00000 n
0000017868 00000 n
0000017913 00000 n
0000018119 00000 n
0000018164 00000 n
0000018369 00000 n
0000018414 00000 n
0000018621 00000 n
0000018666 00000 n
0000018875 00000 n
0000018920 00000 n
0000019130 00000 n
0000019175 00000 n
0000019385 00000 n
0000019430 00000 n
0000022217 00000 n
0000024152 00000 n
0000024364 00000 n
0000024409 00000 n
0000024618 00000 n
0000024663 00000 n
0000024873 00000 n
0000024918 00000 n
0000025127 00000 n
0000025172 00000 n
0000025381 00000 n
0000025426 00000 n
0000025634 00000 n
0000025679 00000 n
0000025889 00000 n
0000025934 00000 n
0000026144 00000 n
0000026189 00000 n
0000026395 00000 n
0000026440 00000 n
0000026648 00000 n
0000026693 00000 n
0000026901 00000 n
0000026946 00000 n
0000027154 00000 n
0000027199 00000 n
0000027405 00000 n
0000027450 00000 n
0000027658 00000 n
0000027703 00000 n
0000027912 00000 n
0000027956 00000 n
0000028165 00000 n
0000028209 00000 n
0000028418 00000 n
0000028658 00000 n
0000028703 00000 n
0000028728 00000 n
0000028934 00000 n
0000029120 00000 n
0000029165 00000 n
0000029371 00000 n
0000029416 00000 n
0000029621 00000 n
0000029666 00000 n
0000029872 00000 n
0000029917 00000 n
0000030121 00000 n
0000030166 00000 n
0000030371 00000 n
0000030416 00000 n
0000030621 00000 n
0000030666 00000 n
0000030873 00000 n
0000030918 00000 n
0000031127 00000 n
0000031172 00000 n
0000031379 00000 n
0000031424 00000 n
0000031632 00000 n
0000031677 00000 n
0000031886 00000 n
0000031931 00000 n
0000032140 00000 n
0000032185 00000 n
0000032394 00000 n
0000032439 00000 n
0000032646 00000 n
0000032691 00000 n
0000032899 00000 n
0000032944 00000 n
0000033152 00000 n
0000033342 00000 n
0000033533 00000 n
0000033730 00000 n
0000033944 00000 n
0000034035 00000 n
0000034127 00000 n
0000034216 00000 n
0000034303 00000 n
0000034397 00000 n
0000034487 00000 n
0000039520 00000 n
0000039612 00000 n
0000046752 00000 n
0000053018 00000 n
0000057274 00000 n
0000057329 00000 n
0000057367 00000 n
0000057470 00000 n
0000057501 00000 n
0000057603 00000 n
0000057629 00000 n
0000057714 00000 n
0000057749 00000 n
0000057888 00000 n
0000057941 00000 n
0000057976 00000 n
0000058020 00000 n
0000058064 00000 n
0000058148 00000 n
0000058266 00000 n
trailer
<<421D419A71D4974584433CEE1E474622>]>>
startxref
61754
%%EOF
1 0 obj<>
endobj
2 0 obj<>
endobj
3 0 obj<>
endobj
5 0 obj<>
endobj
7 0 obj<>
endobj
8 0 obj<><><><><><><><><><><><><><><><><><><><><><><><><>]>>
endobj
9 0 obj<>
endobj
11 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
12 0 obj<>
endobj
17 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
18 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
20 0 obj<>
endobj
27 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
29 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
31 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
33 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
35 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
37 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
39 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
41 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
43 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
45 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
47 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
49 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
51 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
53 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
55 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
57 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
59 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
60 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
63 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
66 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
68 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
70 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
72 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
74 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
76 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
78 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
80 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
82 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
84 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
86 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
88 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
90 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
92 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
94 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
96 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
98 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
100 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
102 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
104 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
106 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
108 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
110 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
112 0 obj<>/A<Enode_chap_8)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
114 0 obj<>/A<Enode_sec_8.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
116 0 obj<>/A<Enode_sec_8.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
118 0 obj<>/A<Enode_sec_8.3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
120 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
122 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
124 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
125 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
128 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
131 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
133 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
135 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
137 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
139 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
141 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
143 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
145 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
147 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
149 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
151 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
153 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
155 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
157 0 obj<0; únode_toc_node_sec_2.2)]/Names[]>>
endobj
159 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
161 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
163 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
165 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
167 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
169 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
171 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
173 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
175 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
177 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
179 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
181 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
183 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
185 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
187 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
189 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
191 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
192 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
195 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
198 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
200 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
202 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
204 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
206 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
208 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
210 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
212 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
214 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
216 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
218 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
220 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
222 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
224 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
226 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
228 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
231 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
232 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
249 0 obj[246 0 R 295 0 R 349 0 R 564 0 R 619 0 R 681 0 R 739 0 R 811 0 R 898 0 R 972 0 R 1017 0 R 1052 0 R 1102 0 R 1202 0 R 1276 0 R 1374 0 R 1435 0 R 1485 0 R 1559 0 R 1646 0 R 1678 0 R 1835 0 R 1895 0 R 1995 0 R 2317 0 R]
endobj
255 0 obj<>
endobj
256 0 obj<>
endobj
257 0 obj<>
endobj
258 0 obj<>
endobj
260 0 obj<>
endobj
261 0 obj<>]/P 9 0 R/S/Article/T()/Pg 262 0 R>>
endobj
262 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
263 0 obj[261 0 R]
endobj
264 0 obj<>/A<>/Border[0 0 0]>>
endobj
265 0 obj[264 0 R 266 0 R 267 0 R 268 0 R 269 0 R 271 0 R 276 0 R 277 0 R 279 0 R]
endobj
266 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
267 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
268 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
269 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
270 0 obj[262 0 R/XYZ 0 719.2 null]
endobj
271 0 obj<>/A<0; únode_toc_node_chap_Temp_2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
272 0 obj[262 0 R/XYZ 0 321.65 null]
endobj
273 0 obj[262 0 R/XYZ 0 321.65 null]
endobj
274 0 obj[262 0 R/XYZ 0 321.65 null]
endobj
275 0 obj[262 0 R/XYZ 0 305.877 null]
endobj
276 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
277 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
278 0 obj[262 0 R/XYZ 0 55.9014 null]
endobj
279 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
280 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
281 0 obj[261 0 R]
endobj
282 0 obj<>/A<>/Border[0 0 0]>>
endobj
283 0 obj[282 0 R 284 0 R 285 0 R 286 0 R 287 0 R]
endobj
284 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
285 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
286 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
287 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
288 0 obj<>
endobj
289 0 obj<>
endobj
290 0 obj<>
endobj
291 0 obj<>
endobj
292 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
BT
/T1_1 1 Tf
14 0 0 14 271.014 744.9756 Tm
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 743.06 m
334.028 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 311.46 744.9756 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 743.06 m
389.244 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 341.028 744.9756 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 743.06 m
419.568 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 396.244 744.9756 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 743.06 m
512.108 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 465.446 744.9756 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 743.06 m
557.594 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 527.27 744.9756 Tm
(index)Tj
1 0 0 rg
(])Tj
0 0 0 rg
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 697.4968 Tm
( )Tj
0 -1.867 TD
( )Tj
ET
2.081 w
48.96 617.763 m
138.451 617.763 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 624.0045 Tm
(Preface)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 582.9602 Tm
(This is an introduction to the Scheme programming language. It is intend\
ed as a quick-)Tj
0 -1.2 TD
(start guide, something a novice can use to get a non-trivial working kno\
wledge of the )Tj
T*
(language, before moving on to more comprehensive and in-depth texts.)Tj
0 -2.557 TD
(The text describes )Tj
/T1_1 1 Tf
(an)Tj
/T1_0 1 Tf
( approach to writing a crisp and utilitarian Scheme. Although we will )Tj
0 -1.205 TD
(not cover Scheme from )Tj
0 0 0.502 rg
/T1_3 1 Tf
(abs)Tj
0 0 0 rg
/T1_0 1 Tf
( to )Tj
0 0 0.502 rg
/T1_3 1 Tf
(zero?)Tj
0 0 0 rg
/T1_0 1 Tf
(, we will not shy away from those aspects of the )Tj
0 -1.2 TD
(language that are difficult, messy, nonstandard, or unusual, but neverth\
eless useful and )Tj
0 -1.205 TD
(usable. Such aspects include )Tj
0 0 0.502 rg
/T1_3 1 Tf
(call-with-current-continuation)Tj
0 0 0 rg
/T1_0 1 Tf
(, system )Tj
0 -1.2 TD
(interface, and dialect diversity. Our discussions will be informed by ou\
r focus on problem-)Tj
T*
(solving, not by a quest for metalinguistic insight. I have therefore lef\
t out many of the )Tj
T*
(staples of traditional Scheme tutorials. There will be no in-depth pedag\
ogy; no dwelling on )Tj
T*
(the semantic appeal of Scheme; no metacircular interpreters; no discussi\
on of the )Tj
T*
(underlying implementation; and no evangelizing about Scheme's virtues. T\
his is not to )Tj
T*
(suggest that these things are unimportant. However, they are arguably no\
t immediately )Tj
T*
(relevant to someone seeking a quick introduction.)Tj
0 -2.825 TD
(How quick though? I do not know if one can teach oneself Scheme in 21 da\
ys)Tj
ET
0.504 w
485.606 311.149 m
490.606 311.149 l
S
0 0 1 rg
BT
/T1_0 1 Tf
10 0 0 10 485.606 312.6609 Tm
(1)Tj
0 0 0 rg
14 0 0 14 490.606 305.8769 Tm
(, although I )Tj
-31.546 -1.2 Td
(have heard it said that the rudiments of Scheme should be a matter of an\
afternoon's study. )Tj
0 -1.2 TD
(The Scheme standard [)Tj
ET
0.706 w
177.648 270.16 m
191.648 270.16 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 177.648 272.2769 Tm
(23)Tj
0 0 0 rg
(] itself, for all its exacting comprehensiveness, is a mere fifty )Tj
-9.192 -1.343 Td
(pages long. It may well be that the insight, when it comes, will arrive \
in its entirety in one )Tj
T*
(afternoon, though there is no telling how many afternoons of mistries mu\
st precede it. )Tj
T*
(Until that zen moment, here is my gentle introduction.)Tj
/T1_1 1 Tf
0 -2.557 TD
(Acknowledgment.)Tj
/T1_0 1 Tf
( I thank Matthias Felleisen for introducing me to Scheme and higher-)Tj
0 -1.2 TD
(order programming; and Matthew Flatt for creating the robust and pleasan\
t MzScheme )Tj
T*
(implementation used throughout this book.)Tj
0 -2.557 TD
(-- d)Tj
ET
0.5 0.5 0.5 rg
48.96 81.901 m
48.96 83.901 l
254.592 83.901 l
253.592 82.901 l
49.96 82.901 l
49.96 82.901 l
h
f
0.875 0.875 0.875 rg
254.592 83.901 m
254.592 81.901 l
48.96 81.901 l
49.96 82.901 l
253.592 82.901 l
253.592 82.901 l
h
f
0.504 w
48.96 45.4 m
53.96 45.4 l
S
0 0 1 rg
BT
/T1_0 1 Tf
10 0 0 10 48.96 46.9125 Tm
(1)Tj
0 0 0 rg
14 0 0 14 53.96 40.1285 Tm
( A )Tj
/T1_1 1 Tf
(fixnum)Tj
/T1_0 1 Tf
( is a machine's idea of a ``small'' integer. Every machine has its own i\
dea of )Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-2.html \(1 o\
f 2\)11/3/2006 8:46:25 PM)Tj
ET
EMC
endstream
endobj
293 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
14 0 0 14 48.96 744.3285 Tm
(how big a fixnum can be.)Tj
1 0 0 rg
/T1_1 1 Tf
15.861 -2.557 Td
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 706.613 m
334.028 706.613 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 311.46 708.5285 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 706.613 m
389.244 706.613 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 341.028 708.5285 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 706.613 m
419.568 706.613 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 396.244 708.5285 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 706.613 m
512.108 706.613 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 465.446 708.5285 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 706.613 m
557.594 706.613 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 527.27 708.5285 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-2.html \(2 o\
f 2\)11/3/2006 8:46:25 PM)Tj
ET
EMC
endstream
endobj
294 0 obj(Teach Yourself Scheme in Fixnum Days )
endobj
295 0 obj<>
endobj
296 0 obj(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-2.html)
endobj
297 0 obj(Z—Ddf¾enL{‚h†²)
endobj
298 0 obj<>
endobj
299 0 obj<>
endobj
300 0 obj(os'ý{šÐ¢„Ü™USW)
endobj
301 0 obj<>
endobj
302 0 obj<>
endobj
303 0 obj<><>]/P 9 0 R/S/Article/T()/Pg 304 0 R>>
endobj
304 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
305 0 obj[303 0 R]
endobj
306 0 obj<>/A<>/Border[0 0 0]>>
endobj
307 0 obj[306 0 R 308 0 R 309 0 R 310 0 R 311 0 R 315 0 R 316 0 R 327 0 R]
endobj
308 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
309 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
310 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
311 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
312 0 obj[304 0 R/XYZ 0 719.2 null]
endobj
313 0 obj<0; únode_toc_node_chap_Temp_2)]/Names[]>>
endobj
314 0 obj<0; únode_toc_node_sec_11.1)(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.2)]/Names[(ôlx&d‘B³Q²>0; únode_toc_node_sec_11.1)132 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_11.2)134 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_11.3)136 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_12.1)140 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_12.2)142 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_12.3)144 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_13.1)148 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_13.2)150 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_13.3)152 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_13.4)154 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_13.4.1)156 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.1)162 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.2)164 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.3)166 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.4)168 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.4.1)170 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_14.4.2)172 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_15.1)176 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_15.2)178 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_15.3)180 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_16.1)184 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_16.2)186 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_16.3)188 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_17.1)193 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_17.2)197 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_17.3)199 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_17.4)201 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.1)32 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.1.1)34 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.1.2)36 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.1.3)38 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.1.4)40 0 R(ôlx&d‘B³Q²>0; únode_toc_node_sec_2.2)42 0 R]>>
endobj
315 0 obj<>/A<0; únode_toc_node_chap_1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
316 0 obj<>/A<0; únode_toc_node_chap_1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
317 0 obj[304 0 R/XYZ 0 592.985 null]
endobj
318 0 obj[304 0 R/XYZ 0 592.985 null]
endobj
319 0 obj[304 0 R/XYZ 0 592.985 null]
endobj
320 0 obj[304 0 R/XYZ 0 437.25 null]
endobj
321 0 obj[304 0 R/XYZ 0 384.65 null]
endobj
322 0 obj[304 0 R/XYZ 0 384.65 null]
endobj
323 0 obj[304 0 R/XYZ 0 384.65 null]
endobj
324 0 obj[304 0 R/XYZ 0 384.65 null]
endobj
325 0 obj[304 0 R/XYZ 0 298.18 null]
endobj
326 0 obj[304 0 R/XYZ 0 298.18 null]
endobj
327 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
328 0 obj[304 0 R/XYZ 0 155.18 null]
endobj
329 0 obj[304 0 R/XYZ 0 155.18 null]
endobj
330 0 obj[304 0 R/XYZ 0 155.18 null]
endobj
331 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
332 0 obj[331 0 R/XYZ 0 756.313 null]
endobj
333 0 obj[303 0 R]
endobj
334 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
335 0 obj[303 0 R]
endobj
336 0 obj[334 0 R/XYZ 0 491.8 null]
endobj
337 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
338 0 obj[337 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R]
endobj
339 0 obj<>/A<>/Border[0 0 0]>>
endobj
340 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
341 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
342 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
343 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
344 0 obj<>
endobj
345 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
BT
/T1_1 1 Tf
14 0 0 14 271.014 744.9756 Tm
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 743.06 m
334.028 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 311.46 744.9756 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 743.06 m
389.244 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 341.028 744.9756 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 743.06 m
419.568 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 396.244 744.9756 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 743.06 m
512.108 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 465.446 744.9756 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 743.06 m
557.594 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 527.27 744.9756 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
2.081 w
48.96 691.255 m
163.196 691.255 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 697.4968 Tm
(Chapter 1)Tj
0 0 0 rg
0 -1.948 TD
( )Tj
ET
48.96 615.763 m
214.146 615.763 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 622.0045 Tm
(Enter Scheme)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 580.8928 Tm
(The canonical first program is the one that says )Tj
0 0.502 0 rg
/T1_3 1 Tf
("Hello, World!")Tj
0 0 0 rg
/T1_0 1 Tf
( on the console. )Tj
0 -1.205 TD
(Using your favorite editor, create a file called )Tj
/T1_3 1 Tf
(hello.scm)Tj
/T1_0 1 Tf
( with the following contents:)Tj
0 0.502 0.502 rg
/T1_3 1 Tf
2.5 -2.562 Td
(;The first program)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0.6 0 0 rg
/T1_4 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(The first line is a comment. When Scheme sees a semicolon, it ignores it\
and all the )Tj
T*
(following text on the line.)Tj
0 -2.562 TD
(The )Tj
0.6 0 0 rg
/T1_4 1 Tf
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
(-)Tj
/T1_1 1 Tf
(form)Tj
/T1_0 1 Tf
( is Scheme's way of introducing a sequence of )Tj
/T1_1 1 Tf
(subforms)Tj
/T1_0 1 Tf
(. In this case )Tj
0 -1.205 TD
(there are two subforms. The first is a call to the )Tj
0 0 0.502 rg
/T1_3 1 Tf
(display)Tj
0 0 0 rg
/T1_0 1 Tf
( procedure that outputs its )Tj
T*
(argument \(the string )Tj
0 0.502 0 rg
/T1_3 1 Tf
("Hello, World!")Tj
0 0 0 rg
/T1_0 1 Tf
(\) to the console \(or ``standard output''\). It is )Tj
0 -1.205 TD
(followed by a )Tj
0 0 0.502 rg
/T1_3 1 Tf
(newline)Tj
0 0 0 rg
/T1_0 1 Tf
( procedure call, which outputs a carriage return.)Tj
0 -2.557 TD
(To run this program, first start your Scheme. This is usually done by ty\
ping the name of )Tj
0 -1.2 TD
(your Scheme executable at the operating-system command line. Eg, in the \
case of )Tj
T*
(MzScheme [)Tj
ET
0.706 w
120.108 250.439 m
127.108 250.439 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 120.108 252.5558 Tm
(9)Tj
0 0 0 rg
(], you type)Tj
/T1_3 1 Tf
-2.582 -2.705 Td
(mzscheme )Tj
/T1_0 1 Tf
-2.5 -2.552 Td
(at the operating-system prompt.)Tj
0 -2.557 TD
(This invokes the Scheme )Tj
/T1_1 1 Tf
(listener)Tj
/T1_0 1 Tf
(, which )Tj
/T1_1 1 Tf
(read)Tj
/T1_0 1 Tf
(s your input, )Tj
/T1_1 1 Tf
(eval)Tj
/T1_0 1 Tf
(uates it, )Tj
/T1_1 1 Tf
(print)Tj
/T1_0 1 Tf
(s the result \(if )Tj
0 -1.2 TD
(any\), and then waits for more input from you. For this reason, it is of\
ten called the )Tj
/T1_1 1 Tf
(read-)Tj
T*
(eval-print loop)Tj
/T1_0 1 Tf
(. Note that this is not much different from your operating-system comman\
d )Tj
T*
(line, which also reads your commands, executes them, and then waits for \
more. Like the )Tj
0 -1.205 TD
(operating system, the Scheme listener has its own prompt -- usually this\
is )Tj
/T1_3 1 Tf
(>)Tj
/T1_0 1 Tf
(, but could be )Tj
0 -1.2 TD
(something else.)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-3.html \(1 o\
f 3\)11/3/2006 8:46:31 PM)Tj
ET
EMC
endstream
endobj
346 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
14 0 0 14 48.96 744.221 Tm
(At the listener prompt, )Tj
/T1_1 1 Tf
(load)Tj
/T1_0 1 Tf
( the file )Tj
/T1_2 1 Tf
(hello.scm)Tj
/T1_0 1 Tf
(. This is done by typing)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(load)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("hello.scm")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Scheme will now execute the contents of )Tj
/T1_2 1 Tf
(hello.scm)Tj
/T1_0 1 Tf
(, outputting )Tj
/T1_2 1 Tf
(Hello, World!)Tj
/T1_0 1 Tf
( )Tj
0 -1.2 TD
(followed by a carriage return. After this, you will get the listener pro\
mpt again, waiting for )Tj
T*
(more input from you.)Tj
0 -2.557 TD
(Since you have such an eager listener, you need not always write your pr\
ograms in a file )Tj
0 -1.2 TD
(and load them. Sometimes, it is easier, especially when you are in an ex\
ploring mood, to )Tj
T*
(simply type expressions directly at the listener prompt and see what hap\
pens. For example, )Tj
T*
(typing the form)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(at the Scheme prompt produces)Tj
/T1_2 1 Tf
2.5 -2.562 Td
(Hello, World! )Tj
/T1_0 1 Tf
-2.5 -2.557 Td
(Actually, you could simply have typed the form )Tj
0 0.502 0 rg
/T1_2 1 Tf
("Hello, World!")Tj
0 0 0 rg
/T1_0 1 Tf
( at the listener, and )Tj
T*
(you would have obtained as result the string)Tj
0 0.502 0 rg
/T1_2 1 Tf
2.5 -2.562 Td
("Hello, World!")Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(because that is the result of the listener evaluating )Tj
0 0.502 0 rg
/T1_2 1 Tf
("Hello, World!")Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.557 TD
(Other than the fact that the second approach produces a result with doub\
le-quotes around )Tj
0 -1.2 TD
(it, there is one other significant difference between the last two progr\
ams. The first \(ie, the )Tj
0 -1.205 TD
(one with the )Tj
0.6 0 0 rg
/T1_3 1 Tf
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
(\) does not evaluate to anything -- the )Tj
/T1_2 1 Tf
(Hello, World!)Tj
/T1_0 1 Tf
( it emits is a )Tj
/T1_1 1 Tf
0 -1.205 TD
(side-effect)Tj
/T1_0 1 Tf
( produced by the )Tj
0 0 0.502 rg
/T1_2 1 Tf
(display)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_2 1 Tf
(newline)Tj
0 0 0 rg
/T1_0 1 Tf
( procedures writing to the standard )Tj
0 -1.205 TD
(output. In the second program, the form )Tj
0 0.502 0 rg
/T1_2 1 Tf
("Hello, World!")Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
/T1_1 1 Tf
(evaluates)Tj
/T1_0 1 Tf
( to the result, )Tj
0 -1.2 TD
(which in this case is the same string as the form.)Tj
0 -2.562 TD
(Henceforth, we will use the notation )Tj
0 0.502 0.502 rg
/T1_3 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0 rg
/T1_0 1 Tf
(to denote evaluation. Thus)Tj
0 0 0.502 rg
/T1_2 1 Tf
2.5 -2.562 Td
(E)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_3 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(v)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(indicates that the form )Tj
0 0 0.502 rg
/T1_2 1 Tf
(E)Tj
0 0 0 rg
/T1_0 1 Tf
( evaluates to a result value of )Tj
0 0 0.502 rg
/T1_2 1 Tf
(v)Tj
0 0 0 rg
/T1_0 1 Tf
(. Eg,)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(begin)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-3.html \(2 o\
f 3\)11/3/2006 8:46:31 PM)Tj
ET
EMC
endstream
endobj
347 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
14 0 0 14 83.96 744.9082 Tm
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(\(ie, nothing or void\), although it has the side-effect of writing)Tj
/T1_1 1 Tf
2.5 -2.562 Td
(Hello, World! )Tj
/T1_0 1 Tf
-2.5 -2.552 Td
(to the standard output. On the other hand,)Tj
0 0.502 0 rg
/T1_1 1 Tf
2.5 -2.562 Td
("Hello, World!")Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(In either case, we are still at the listener. To exit, type)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(exit)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(and this will land you back at the operating-system command-line \(which\
, as we've seen, )Tj
T*
(is also a kind of listener\).)Tj
0 -2.557 TD
(The listener is convenient for interactive testing of programs and progr\
am fragments. )Tj
0 -1.2 TD
(However it is by no means necessary. You may certainly stick to the trad\
ition of creating )Tj
T*
(programs in their entirety in files, and having Scheme execute them with\
out any explicit )Tj
T*
(``listening''. In MzScheme, for instance, you could say \(at the operati\
ng-system prompt\))Tj
/T1_1 1 Tf
2.5 -2.562 Td
(mzscheme -r hello.scm )Tj
/T1_0 1 Tf
-2.5 -2.552 Td
(and this will produce the greeting without making you deal with the list\
ener. After the )Tj
0 -1.205 TD
(greeting, )Tj
/T1_1 1 Tf
(mzscheme)Tj
/T1_0 1 Tf
( will return you to the operating-system prompt. This is almost as if )Tj
0 -1.2 TD
(you said)Tj
/T1_1 1 Tf
2.5 -2.562 Td
(echo Hello, World! )Tj
/T1_0 1 Tf
-2.5 -2.557 Td
(You could even make )Tj
/T1_1 1 Tf
(hello.scm)Tj
/T1_0 1 Tf
( seem like an operating-system command \(a shell )Tj
T*
(script or a batch file\), but that will have to wait till chapter )Tj
ET
0 0 1 RG
0.706 w 10 M 0 j 0 J []0 d
379.472 145.124 m
393.472 145.124 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 379.472 147.2408 Tm
(16)Tj
0 0 0 rg
(.)Tj
1 0 0 rg
/T1_3 1 Tf
-7.747 -2.7 Td
([Go to )Tj
ET
0.638 w
311.46 107.526 m
334.028 107.526 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 311.46 109.4408 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 107.526 m
389.244 107.526 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 341.028 109.4408 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 107.526 m
419.568 107.526 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 396.244 109.4408 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 107.526 m
512.108 107.526 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 465.446 109.4408 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 107.526 m
557.594 107.526 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 527.27 109.4408 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-3.html \(3 o\
f 3\)11/3/2006 8:46:31 PM)Tj
ET
EMC
endstream
endobj
348 0 obj(Teach Yourself Scheme in Fixnum Days )
endobj
349 0 obj<>
endobj
350 0 obj(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-3.html)
endobj
351 0 obj(5À~…„¥%¢ùë}£¸)
endobj
352 0 obj<>
endobj
353 0 obj<>
endobj
354 0 obj(´½Â;>ècò÷½u¬X)
endobj
355 0 obj<>
endobj
356 0 obj<>
endobj
357 0 obj<><><><><><><><><><><>]/P 9 0 R/S/Article/T()/Pg 358 0 R>>
endobj
358 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
359 0 obj[357 0 R]
endobj
360 0 obj<>/A<>/Border[0 0 0]>>
endobj
361 0 obj[360 0 R 362 0 R 363 0 R 364 0 R 365 0 R 367 0 R 368 0 R 372 0 R 375 0 R 384 0 R]
endobj
362 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
363 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
364 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
365 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
366 0 obj[358 0 R/XYZ 0 719.871 null]
endobj
367 0 obj<>/A<0; únode_toc_node_chap_2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
368 0 obj<>/A<0; únode_toc_node_chap_2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
369 0 obj[358 0 R/XYZ 0 595.201 null]
endobj
370 0 obj[358 0 R/XYZ 0 526.651 null]
endobj
371 0 obj[358 0 R/XYZ 0 526.651 null]
endobj
372 0 obj<>/A<0; únode_toc_node_sec_2.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
373 0 obj[358 0 R/XYZ 0 447.57 null]
endobj
374 0 obj[358 0 R/XYZ 0 447.57 null]
endobj
375 0 obj<>/A<0; únode_toc_node_sec_2.1.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
376 0 obj[358 0 R/XYZ 0 407.68 null]
endobj
377 0 obj[358 0 R/XYZ 0 407.68 null]
endobj
378 0 obj[358 0 R/XYZ 0 407.68 null]
endobj
379 0 obj[358 0 R/XYZ 0 407.68 null]
endobj
380 0 obj[358 0 R/XYZ 0 407.68 null]
endobj
381 0 obj[358 0 R/XYZ 0 303.635 null]
endobj
382 0 obj[358 0 R/XYZ 0 147.634 null]
endobj
383 0 obj[358 0 R/XYZ 0 147.634 null]
endobj
384 0 obj<>/A<0; únode_toc_node_sec_2.1.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
385 0 obj[358 0 R/XYZ 0 39.0602 null]
endobj
386 0 obj[358 0 R/XYZ 0 39.0602 null]
endobj
387 0 obj[358 0 R/XYZ 0 39.0602 null]
endobj
388 0 obj[358 0 R/XYZ 0 39.0602 null]
endobj
389 0 obj<>
endobj
390 0 obj<0; únode_toc_node_chap_Temp_2)]/Names[]>>
endobj
391 0 obj[358 0 R/XYZ 0 39.0602 null]
endobj
392 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
393 0 obj<>
endobj
394 0 obj<>
endobj
395 0 obj[357 0 R]
endobj
396 0 obj[392 0 R/XYZ 0 539.309 null]
endobj
397 0 obj[392 0 R/XYZ 0 539.309 null]
endobj
398 0 obj[392 0 R/XYZ 0 539.309 null]
endobj
399 0 obj[392 0 R/XYZ 0 539.309 null]
endobj
400 0 obj[392 0 R/XYZ 0 470.626 null]
endobj
401 0 obj[392 0 R/XYZ 0 366.648 null]
endobj
402 0 obj[392 0 R/XYZ 0 246.008 null]
endobj
403 0 obj[392 0 R/XYZ 0 246.008 null]
endobj
404 0 obj[392 0 R/XYZ 0 246.008 null]
endobj
405 0 obj[392 0 R/XYZ 0 246.008 null]
endobj
406 0 obj[392 0 R/XYZ 0 158.624 null]
endobj
407 0 obj[392 0 R/XYZ 0 158.624 null]
endobj
408 0 obj[392 0 R/XYZ 0 158.624 null]
endobj
409 0 obj[392 0 R/XYZ 0 158.624 null]
endobj
410 0 obj[392 0 R/XYZ 0 158.624 null]
endobj
411 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
412 0 obj[357 0 R]
endobj
413 0 obj[411 0 R/XYZ 0 601.274 null]
endobj
414 0 obj[411 0 R/XYZ 0 601.274 null]
endobj
415 0 obj[411 0 R/XYZ 0 497.295 null]
endobj
416 0 obj[411 0 R/XYZ 0 409.911 null]
endobj
417 0 obj[411 0 R/XYZ 0 409.911 null]
endobj
418 0 obj[411 0 R/XYZ 0 409.911 null]
endobj
419 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
420 0 obj[419 0 R 423 0 R]
endobj
421 0 obj[411 0 R/XYZ 0 322.725 null]
endobj
422 0 obj[411 0 R/XYZ 0 322.725 null]
endobj
423 0 obj<>/A<0; únode_toc_node_sec_2.1.3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
424 0 obj[411 0 R/XYZ 0 282.835 null]
endobj
425 0 obj[411 0 R/XYZ 0 214.085 null]
endobj
426 0 obj[411 0 R/XYZ 0 74.7446 null]
endobj
427 0 obj[411 0 R/XYZ 0 74.7446 null]
endobj
428 0 obj[411 0 R/XYZ 0 74.7446 null]
endobj
429 0 obj[411 0 R/XYZ 0 74.7446 null]
endobj
430 0 obj[411 0 R/XYZ 0 74.7446 null]
endobj
431 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
432 0 obj[357 0 R]
endobj
433 0 obj[431 0 R/XYZ 0 675.534 null]
endobj
434 0 obj[431 0 R/XYZ 0 675.534 null]
endobj
435 0 obj[431 0 R/XYZ 0 675.534 null]
endobj
436 0 obj[431 0 R/XYZ 0 675.534 null]
endobj
437 0 obj[431 0 R/XYZ 0 675.534 null]
endobj
438 0 obj[431 0 R/XYZ 0 571.555 null]
endobj
439 0 obj[431 0 R/XYZ 0 571.555 null]
endobj
440 0 obj[431 0 R/XYZ 0 484.171 null]
endobj
441 0 obj[431 0 R/XYZ 0 484.171 null]
endobj
442 0 obj<>/A<0; únode_toc_node_sec_2.1.4)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
443 0 obj[442 0 R]
endobj
444 0 obj[431 0 R/XYZ 0 444.281 null]
endobj
445 0 obj[431 0 R/XYZ 0 307.181 null]
endobj
446 0 obj[431 0 R/XYZ 0 307.181 null]
endobj
447 0 obj[431 0 R/XYZ 0 222.036 null]
endobj
448 0 obj[431 0 R/XYZ 0 118.124 null]
endobj
449 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
450 0 obj[357 0 R]
endobj
451 0 obj[449 0 R/XYZ 0 681.512 null]
endobj
452 0 obj[449 0 R/XYZ 0 527.618 null]
endobj
453 0 obj[449 0 R/XYZ 0 423.639 null]
endobj
454 0 obj[449 0 R/XYZ 0 423.639 null]
endobj
455 0 obj[449 0 R/XYZ 0 248.804 null]
endobj
456 0 obj[449 0 R/XYZ 0 90.697 null]
endobj
457 0 obj[449 0 R/XYZ 0 90.697 null]
endobj
458 0 obj<>/A<0; únode_toc_node_sec_2.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
459 0 obj[458 0 R]
endobj
460 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
461 0 obj[357 0 R]
endobj
462 0 obj[460 0 R/XYZ 0 705.252 null]
endobj
463 0 obj<>
endobj
464 0 obj<>
endobj
465 0 obj[460 0 R/XYZ 0 705.252 null]
endobj
466 0 obj<>/A<0; únode_toc_node_sec_2.2.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
467 0 obj[466 0 R]
endobj
468 0 obj[460 0 R/XYZ 0 544.856 null]
endobj
469 0 obj[460 0 R/XYZ 0 351.32 null]
endobj
470 0 obj[460 0 R/XYZ 0 247.342 null]
endobj
471 0 obj[460 0 R/XYZ 0 126.836 null]
endobj
472 0 obj[460 0 R/XYZ 0 56.1125 null]
endobj
473 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
474 0 obj<>
endobj
475 0 obj[473 0 R/XYZ 0 742.113 null]
endobj
476 0 obj[357 0 R]
endobj
477 0 obj[473 0 R/XYZ 0 555.096 null]
endobj
478 0 obj[473 0 R/XYZ 0 555.096 null]
endobj
479 0 obj<>/A<0; únode_toc_node_sec_2.2.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
480 0 obj[479 0 R 489 0 R]
endobj
481 0 obj[473 0 R/XYZ 0 446.656 null]
endobj
482 0 obj[473 0 R/XYZ 0 307.316 null]
endobj
483 0 obj[473 0 R/XYZ 0 167.843 null]
endobj
484 0 obj[473 0 R/XYZ 0 167.843 null]
endobj
485 0 obj[473 0 R/XYZ 0 167.843 null]
endobj
486 0 obj[473 0 R/XYZ 0 167.843 null]
endobj
487 0 obj[473 0 R/XYZ 0 167.843 null]
endobj
488 0 obj[473 0 R/XYZ 0 167.843 null]
endobj
489 0 obj<>/A<0; únode_toc_node_sec_2.2.3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
490 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
491 0 obj[357 0 R]
endobj
492 0 obj[490 0 R/XYZ 0 430.852 null]
endobj
493 0 obj[490 0 R/XYZ 0 430.852 null]
endobj
494 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
495 0 obj[357 0 R]
endobj
496 0 obj[494 0 R/XYZ 0 721.847 null]
endobj
497 0 obj[494 0 R/XYZ 0 343.334 null]
endobj
498 0 obj[494 0 R/XYZ 0 168.566 null]
endobj
499 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
500 0 obj[357 0 R]
endobj
501 0 obj[499 0 R/XYZ 0 611.248 null]
endobj
502 0 obj[499 0 R/XYZ 0 611.248 null]
endobj
503 0 obj[499 0 R/XYZ 0 405.531 null]
endobj
504 0 obj[499 0 R/XYZ 0 405.531 null]
endobj
505 0 obj[499 0 R/XYZ 0 405.531 null]
endobj
506 0 obj[499 0 R/XYZ 0 185.392 null]
endobj
507 0 obj<>/A<0; únode_toc_node_sec_2.2.4)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
508 0 obj[507 0 R]
endobj
509 0 obj[499 0 R/XYZ 0 145.502 null]
endobj
510 0 obj[499 0 R/XYZ 0 145.502 null]
endobj
511 0 obj[499 0 R/XYZ 0 145.502 null]
endobj
512 0 obj[499 0 R/XYZ 0 145.502 null]
endobj
513 0 obj[499 0 R/XYZ 0 145.502 null]
endobj
514 0 obj[499 0 R/XYZ 0 145.502 null]
endobj
515 0 obj[499 0 R/XYZ 0 145.502 null]
endobj
516 0 obj[499 0 R/XYZ 0 145.502 null]
endobj
517 0 obj<>
endobj
518 0 obj<>
endobj
519 0 obj[499 0 R/XYZ 0 145.502 null]
endobj
520 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
521 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 275.1893 745.3309 Tm
([Go to )Tj
ET
0 0 1 RG
0.631 w 10 M 0 j 0 J []0 d
315.14 743.439 m
337.432 743.439 l
S
0 0 1 rg
BT
/T1_0 1 Tf
13.8286 0 0 13.8286 315.14 745.3309 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
344.346 743.439 m
391.972 743.439 l
S
0 0 1 rg
BT
/T1_0 1 Tf
13.8286 0 0 13.8286 344.346 745.3309 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
398.886 743.439 m
421.924 743.439 l
S
0 0 1 rg
BT
/T1_0 1 Tf
13.8286 0 0 13.8286 398.8859 745.3309 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
467.241 743.439 m
513.331 743.439 l
S
0 0 1 rg
BT
/T1_0 1 Tf
13.8286 0 0 13.8286 467.2405 745.3309 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
528.307 743.439 m
558.26 743.439 l
S
0 0 1 rg
BT
/T1_0 1 Tf
13.8286 0 0 13.8286 528.3075 745.3309 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
2.055 w
48.361 692.268 m
161.197 692.268 l
S
0 0 1 rg
BT
/T1_1 1 Tf
24.4659 0 0 24.4659 48.3605 698.4336 Tm
(Chapter 2)Tj
0 0 0 rg
0 -1.948 TD
( )Tj
ET
48.361 617.7 m
172.085 617.7 l
S
0 0 1 rg
BT
/T1_1 1 Tf
24.4659 0 0 24.4659 48.3605 623.8656 Tm
(Data types)Tj
0 0 0 rg
/T1_2 1 Tf
13.8286 0 0 13.8286 48.3605 583.3239 Tm
(A )Tj
/T1_0 1 Tf
(data type)Tj
/T1_2 1 Tf
( is a collection of related values. These collections need not be disjoi\
nt, and they )Tj
0 -1.2 TD
(are often hierarchical. Scheme has a rich set of data types: some are si\
mple \(indivisible\) )Tj
T*
(data types and others are compound data types made by combining other da\
ta types.)Tj
ET
1.608 w
48.361 505.049 m
248.43 505.049 l
S
0 0 1 rg
BT
/T1_1 1 Tf
19.1473 0 0 19.1473 48.3605 509.8737 Tm
(2.1 Simple data types)Tj
0 0 0 rg
/T1_2 1 Tf
13.8286 0 0 13.8286 48.3605 471.0541 Tm
(The simple data types of Scheme include booleans, numbers, characters, a\
nd symbols.)Tj
ET
1.34 w
48.361 429.568 m
164.536 429.568 l
S
0 0 1 rg
BT
/T1_1 1 Tf
15.956 0 0 15.956 48.3605 433.5887 Tm
(2.1.1 Booleans)Tj
0 0 0 rg
/T1_2 1 Tf
13.8286 0 0 13.8286 48.3605 395.7358 Tm
(Scheme's booleans are )Tj
0 0.502 0 rg
/T1_3 1 Tf
(#t)Tj
0 0 0 rg
/T1_2 1 Tf
( for true and )Tj
0 0.502 0 rg
/T1_3 1 Tf
(#f)Tj
0 0 0 rg
/T1_2 1 Tf
( for false. Scheme has a predicate procedure )Tj
0 -1.205 TD
(called )Tj
0 0 0.502 rg
/T1_3 1 Tf
(boolean?)Tj
0 0 0 rg
/T1_2 1 Tf
( that checks if its argument is boolean.)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(boolean?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_4 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(boolean?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_4 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(The procedure )Tj
0 0 0.502 rg
/T1_3 1 Tf
(not)Tj
0 0 0 rg
/T1_2 1 Tf
( negates its argument, considered as a boolean.)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(not)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_4 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(not)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_4 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(not)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_4 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(The last expression illustrates a Scheme convenience: In a context that \
requires a boolean, )Tj
0 -1.205 TD
(Scheme will treat any value that is not )Tj
0 0.502 0 rg
/T1_3 1 Tf
(#f)Tj
0 0 0 rg
/T1_2 1 Tf
( as a true value.)Tj
ET
48.361 129.632 m
161.872 129.632 l
S
0 0 1 rg
BT
/T1_1 1 Tf
15.956 0 0 15.956 48.3605 133.6527 Tm
(2.1.2 Numbers)Tj
0 0 0 rg
/T1_2 1 Tf
13.8286 0 0 13.8286 48.3605 95.7997 Tm
(Scheme numbers can be integers \(eg, )Tj
0 0.502 0 rg
/T1_3 1 Tf
(42)Tj
0 0 0 rg
/T1_2 1 Tf
(\), rationals \()Tj
0 0.502 0 rg
/T1_3 1 Tf
(22/7)Tj
0 0 0 rg
/T1_2 1 Tf
(\), reals \()Tj
0 0.502 0 rg
/T1_3 1 Tf
(3.1416)Tj
0 0 0 rg
/T1_2 1 Tf
(\), or complex \()Tj
0 0.502 0 rg
/T1_3 1 Tf
(2)Tj
T*
(+3i)Tj
0 0 0 rg
/T1_2 1 Tf
(\). An integer is a rational is a real is a complex number is a number. \
Predicates exist for )Tj
0 -1.2 TD
(testing the various kinds of numberness:)Tj
ET
EMC
Q
endstream
endobj
522 0 obj[357 0 R]
endobj
523 0 obj[520 0 R/XYZ 0 131.231 null]
endobj
524 0 obj<>/A<0; únode_toc_node_sec_2.3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
525 0 obj[524 0 R]
endobj
526 0 obj[520 0 R/XYZ 0 87.5116 null]
endobj
527 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
528 0 obj<>
endobj
529 0 obj<>
endobj
530 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 82.9319 745.2644 Tm
(\()Tj
0 0 0.502 rg
(number?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(number?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(complex?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2+3i)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(real?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2+3i)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(real?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3.1416)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(real?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(22/7)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(real?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(rational?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2+3i)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(rational?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3.1416)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(rational?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(22/7)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(integer?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(22/7)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(integer?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(Scheme integers need not be specified in decimal \(base 10\) format. The\
y can be specified in )Tj
0 -1.205 TD
(binary by prefixing the numeral with )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#b)Tj
0 0 0 rg
/T1_2 1 Tf
(. Thus )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#b1100)Tj
0 0 0 rg
/T1_2 1 Tf
( is the number twelve. The octal )Tj
0 -1.205 TD
(prefix is )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#o)Tj
0 0 0 rg
/T1_2 1 Tf
( and the hex prefix is )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#x)Tj
0 0 0 rg
/T1_2 1 Tf
(. \(The optional decimal prefix is )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#d)Tj
0 0 0 rg
/T1_2 1 Tf
(.\))Tj
0 -2.562 TD
(Numbers can tested for equality using the general-purpose equality predi\
cate )Tj
0 0 0.502 rg
/T1_0 1 Tf
(eqv?)Tj
0 0 0 rg
/T1_2 1 Tf
(.)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(eqv?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(eqv?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(eqv?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42.0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(However, if you know that the arguments to be compared are numbers, the \
special number-)Tj
0 -1.205 TD
(equality predicate )Tj
0 0 0.502 rg
/T1_0 1 Tf
(=)Tj
0 0 0 rg
/T1_2 1 Tf
( is more apt.)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
(\) )Tj
1 0 0 rg
/T1_3 1 Tf
(-->ERROR!!!)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
0 -1.205 TD
(\()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42.0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(Other number comparisons allowed are )Tj
0 0 0.502 rg
/T1_0 1 Tf
(<)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(<=)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(>)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(>=)Tj
0 0 0 rg
/T1_2 1 Tf
(.)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(<)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(>=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4.5)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(Arithmetic procedures )Tj
0 0 0.502 rg
/T1_0 1 Tf
(+)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(-)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(*)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(/)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(expt)Tj
0 0 0 rg
/T1_2 1 Tf
( have the expected behavior:)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(6)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5.3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(3.3)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(*)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(6)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(/)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(6)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
ET
EMC
Q
endstream
endobj
531 0 obj[357 0 R]
endobj
532 0 obj[527 0 R/XYZ 0 636.411 null]
endobj
533 0 obj[527 0 R/XYZ 0 411.727 null]
endobj
534 0 obj[527 0 R/XYZ 0 411.727 null]
endobj
535 0 obj<>/A<0; únode_toc_node_sec_2.4)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
536 0 obj[535 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R]
endobj
537 0 obj<>/A<>/Border[0 0 0]>>
endobj
538 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
539 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
540 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
541 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
542 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 82.9319 745.2644 Tm
(\()Tj
0 0 0.502 rg
(/)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(22)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(7)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(22/7)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(expt)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(8)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(expt)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1/2)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(2.0)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(For a single argument, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(-)Tj
0 0 0 rg
/T1_2 1 Tf
( and )Tj
0 0 0.502 rg
/T1_0 1 Tf
(/)Tj
0 0 0 rg
/T1_2 1 Tf
( return the negation and the reciprocal respectively:)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(-4)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(/)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(1/4)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(The procedures )Tj
0 0 0.502 rg
/T1_0 1 Tf
(max)Tj
0 0 0 rg
/T1_2 1 Tf
( and )Tj
0 0 0.502 rg
/T1_0 1 Tf
(min)Tj
0 0 0 rg
/T1_2 1 Tf
( return the maximum and minimum respectively of the )Tj
T*
(number arguments supplied to them. Any number of arguments can be so sup\
plied.)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(max)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(min)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(The procedure )Tj
0 0 0.502 rg
/T1_0 1 Tf
(abs)Tj
0 0 0 rg
/T1_2 1 Tf
( returns the absolute value of its argument.)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(abs)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(abs)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(-4)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(4)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(This is just the tip of the iceberg. Scheme provides a large and compreh\
ensive suite of )Tj
0 -1.205 TD
(arithmetic and trigonometric procedures. For instance, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(atan)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(exp)Tj
0 0 0 rg
/T1_2 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_0 1 Tf
(sqrt)Tj
0 0 0 rg
/T1_2 1 Tf
( respectively )Tj
0 -1.2 TD
(return the arctangent, natural antilogarithm, and square root of their a\
rgument. Consult )Tj
0 -1.2 TD
(R5RS [)Tj
ET
0 0 1 RG
0.697 w 10 M 0 j 0 J []0 d
89.473 346.094 m
103.301 346.094 l
S
0 0 1 rg
BT
/T1_2 1 Tf
13.8286 0 0 13.8286 89.4729 348.1846 Tm
(23)Tj
0 0 0 rg
(] for more details.)Tj
ET
1.34 w
48.361 304.723 m
176.073 304.723 l
S
0 0 1 rg
BT
/T1_3 1 Tf
15.956 0 0 15.956 48.3605 308.7437 Tm
(2.1.3 Characters)Tj
0 0 0 rg
/T1_2 1 Tf
13.8286 0 0 13.8286 48.3605 270.8908 Tm
(Scheme character data are represented by prefixing the character with )Tj
/T1_0 1 Tf
(#\\)Tj
/T1_2 1 Tf
(. Thus, )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#\\c)Tj
0 0 0 rg
/T1_2 1 Tf
( is the )Tj
0 -1.205 TD
(character )Tj
/T1_0 1 Tf
(c)Tj
/T1_2 1 Tf
(. Some non-graphic characters have more descriptive names, eg, )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#\\newline)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#)Tj
0 -1.205 TD
(\\tab)Tj
0 0 0 rg
/T1_2 1 Tf
(. The character for space can be written )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#\\ )Tj
0 0 0 rg
/T1_2 1 Tf
( , or more readably, )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#\\space)Tj
0 0 0 rg
/T1_2 1 Tf
(.)Tj
0 -2.562 TD
(The character predicate is )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char?)Tj
0 0 0 rg
/T1_2 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(char?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\c)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(char?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(char?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\;)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(Note that a semicolon character datum does not trigger a comment.)Tj
0 -2.562 TD
(The character data type has its set of comparison predicates: )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char=?)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char<=?)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
0 -1.205 TD
(char>?)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char>=?)Tj
0 0 0 rg
/T1_2 1 Tf
(.)Tj
ET
EMC
Q
endstream
endobj
543 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 82.9319 732.1403 Tm
(\()Tj
0 0 0.502 rg
(char=?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\b)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(char>=?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\b)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(To make the comparisons case-insensitive, use )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char-ci)Tj
0 0 0 rg
/T1_2 1 Tf
( instead of )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char)Tj
0 0 0 rg
/T1_2 1 Tf
( in the procedure )Tj
T*
(name:)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(char-ci=?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\A)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(char-ci)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\B)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(The case conversion procedures are )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char-downcase)Tj
0 0 0 rg
/T1_2 1 Tf
( and )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char-upcase)Tj
0 0 0 rg
/T1_2 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(char-downcase)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\A)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(char-upcase)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#\\A)Tj
ET
0 0 1 RG
1.34 w 10 M 0 j 0 J []0 d
48.361 466.169 m
159.223 466.169 l
S
0 0 1 rg
BT
/T1_3 1 Tf
15.956 0 0 15.956 48.3605 470.1903 Tm
(2.1.4 Symbols)Tj
0 0 0 rg
/T1_2 1 Tf
13.8286 0 0 13.8286 48.3605 432.4039 Tm
(The simple data types we saw above are )Tj
/T1_4 1 Tf
(self-evaluating)Tj
/T1_2 1 Tf
(. Ie, if you typed any object from )Tj
T*
(these data types to the listener, the evaluated result returned by the l\
istener will be the same )Tj
T*
(as what you typed in.)Tj
0 0.502 0 rg
/T1_0 1 Tf
2.5 -2.562 Td
(#t)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
T*
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(42)Tj
T*
(#\\c)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#\\c)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(Symbols don't behave the same way. This is because symbols are used by S\
cheme programs )Tj
T*
(as )Tj
/T1_4 1 Tf
(identifiers)Tj
/T1_2 1 Tf
( for )Tj
/T1_4 1 Tf
(variables)Tj
/T1_2 1 Tf
(, and thus will evaluate to the value that the variable holds. )Tj
T*
(Nevertheless, symbols are a simple data type, and symbols are legitimate\
values that )Tj
T*
(Scheme can traffic in, along with characters, numbers, and the rest.)Tj
0 -2.557 TD
(To specify a symbol without making Scheme think it is a variable, you sh\
ould )Tj
/T1_4 1 Tf
(quote)Tj
/T1_2 1 Tf
( the )Tj
0 -1.2 TD
(symbol:)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(quote)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0 0.502 rg
(xyz)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0 0.502 rg
(xyz)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(Since this type of quoting is very common in Scheme, a convenient abbrev\
iation is )Tj
T*
(provided. The expression)Tj
0.6 0 0 rg
/T1_1 1 Tf
2.5 -2.562 Td
(')Tj
0 0 0.502 rg
/T1_0 1 Tf
(E)Tj
ET
EMC
Q
endstream
endobj
544 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 48.3605 740.3582 Tm
(will be treated by Scheme as equivalent to)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(quote)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(E)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Scheme symbols are named by a sequence of characters. About the only lim\
itation on a )Tj
0 -1.2 TD
(symbol's name is that it shouldn't be mistakable for some other data, eg\
, characters or )Tj
0 -1.205 TD
(booleans or numbers or compound data. Thus, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(this-is-a-symbol)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(i18n)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(<=>)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_1 1 Tf
($!)Tj
0 -1.205 TD
(#*)Tj
0 0 0 rg
/T1_0 1 Tf
( are all symbols; )Tj
0 0.502 0 rg
/T1_1 1 Tf
(16)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0.502 0 rg
/T1_1 1 Tf
(-i)Tj
0 0 0 rg
/T1_0 1 Tf
( \(a complex number!\), )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0.502 0 rg
/T1_1 1 Tf
("this-is-a-string")Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
0 -1.205 TD
(\()Tj
0 0 0.502 rg
(barf)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
( \(a list\) are not. The predicate for checking symbolness is called )Tj
0 0 0.502 rg
/T1_1 1 Tf
(symbol?)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(symbol?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(xyz)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(symbol?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Scheme symbols are normally case-insensitive. Thus the symbols )Tj
0 0 0.502 rg
/T1_1 1 Tf
(Calorie)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(calorie)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.2 TD
(are identical:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(eqv?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(Calorie)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(calorie)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(We can use the symbol )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
( as a global variable by using the form )Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(xyz)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(This says the variable )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
( holds the value )Tj
0 0.502 0 rg
/T1_1 1 Tf
(9)Tj
0 0 0 rg
/T1_0 1 Tf
(. If we feed )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
( to the listener, the result will )Tj
0 -1.205 TD
(be the value held by )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0 0 0.502 rg
/T1_1 1 Tf
2.5 -2.562 Td
(xyz)Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(9)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(We can use the form )Tj
0.6 0 0 rg
/T1_2 1 Tf
(set!)Tj
0 0 0 rg
/T1_0 1 Tf
( to )Tj
/T1_3 1 Tf
(change)Tj
/T1_0 1 Tf
( the value held by a variable:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(xyz)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\c)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Now)Tj
0 0 0.502 rg
/T1_1 1 Tf
2.5 -2.562 Td
(xyz)Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#\\c)Tj
ET
0 0 1 RG
1.608 w 10 M 0 j 0 J []0 d
48.361 69.095 m
286.686 69.095 l
S
0 0 1 rg
BT
/T1_4 1 Tf
19.1473 0 0 19.1473 48.3605 73.9198 Tm
(2.2 Compound data types)Tj
ET
EMC
Q
endstream
endobj
545 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 48.3605 745.3309 Tm
(Compound data types are built by combining values from other data types \
in structured )Tj
0 -1.2 TD
(ways.)Tj
ET
0 0 1 RG
1.34 w 10 M 0 j 0 J []0 d
48.361 687.25 m
147.687 687.25 l
S
0 0 1 rg
BT
/T1_1 1 Tf
15.956 0 0 15.956 48.3605 691.2713 Tm
(2.2.1 Strings)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 653.4849 Tm
(Strings are sequences of characters \(not to be confused with symbols, w\
hich are simple data )Tj
T*
(that have a sequence of characters as their name\). You can specify stri\
ngs by enclosing the )Tj
T*
(constituent characters in double-quotes. Strings evaluate to themselves.\
)Tj
0 0.502 0 rg
/T1_2 1 Tf
2.5 -2.562 Td
("Hello, World!")Tj
0 0.502 0.502 rg
/T1_3 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The procedure )Tj
0 0 0.502 rg
/T1_2 1 Tf
(string)Tj
0 0 0 rg
/T1_0 1 Tf
( takes a bunch of characters and returns the string made from them:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\h)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\e)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\o)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_3 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
("hello")Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Let us now define a global variable )Tj
0 0 0.502 rg
/T1_2 1 Tf
(greeting)Tj
0 0 0 rg
/T1_0 1 Tf
(. )Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(greeting)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Hello; Hello!")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Note that a semicolon inside a string datum does not trigger a comment.)Tj
0 -2.557 TD
(The characters in a given string can be individually accessed and modifi\
ed. The procedure )Tj
0 0 0.502 rg
/T1_2 1 Tf
0 -1.205 TD
(string-ref)Tj
0 0 0 rg
/T1_0 1 Tf
( takes a string and a \(0-based\) index, and returns the character at th\
at index:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string-ref)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(greeting)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_3 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(#\\H)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(New strings can be created by appending other strings:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string-append)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("E ")Tj
0.647 0.165 0.165 rg
T*
( )Tj
0 0.502 0 rg
("Pluribus ")Tj
0.647 0.165 0.165 rg
T*
( )Tj
0 0.502 0 rg
("Unum")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_3 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
("E Pluribus Unum")Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(You can make a string of a specified length, and fill it with the desire\
d characters later.)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(a-3-char-long-string)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(make-string)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The predicate for checking stringness is )Tj
0 0 0.502 rg
/T1_2 1 Tf
(string?)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
ET
EMC
Q
endstream
endobj
546 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 48.3605 730.1691 Tm
(Strings obtained as a result of calls to )Tj
0 0 0.502 rg
/T1_1 1 Tf
(string)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(make-string)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(string-append)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.205 TD
(are mutable. The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(string-set!)Tj
0 0 0 rg
/T1_0 1 Tf
( replaces the character at a given index:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(hello)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(string)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\H)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\e)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\o)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0 0.502 rg
0 -1.2 TD
(hello)Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
("Hello")Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(string-set!)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(hello)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0.502 rg
0 -1.2 TD
(hello)Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
("Hallo")Tj
ET
0 0 1 RG
1.34 w 10 M 0 j 0 J []0 d
48.361 537.095 m
151.245 537.095 l
S
0 0 1 rg
BT
/T1_3 1 Tf
15.956 0 0 15.956 48.3605 541.1155 Tm
(2.2.2 Vectors)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 503.3291 Tm
(Vectors are sequences like strings, but their elements can be anything, \
not just characters. )Tj
T*
(Indeed, the elements can be vectors themselves, which is a good way to g\
enerate )Tj
T*
(multidimensional vectors.)Tj
0 -2.557 TD
(Here's a way to create a vector of the first five integers:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(vector)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#)Tj
0.647 0.165 0.165 rg
(\()Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Note Scheme's representation of a vector value: a )Tj
/T1_1 1 Tf
(#)Tj
/T1_0 1 Tf
( character followed by the vector's )Tj
T*
(contents enclosed in parentheses.)Tj
0 -2.562 TD
(In analogy with )Tj
0 0 0.502 rg
/T1_1 1 Tf
(make-string)Tj
0 0 0 rg
/T1_0 1 Tf
(, the procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(make-vector)Tj
0 0 0 rg
/T1_0 1 Tf
( makes a vector of a )Tj
0 -1.2 TD
(specific length:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(v)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(make-vector)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The procedures )Tj
0 0 0.502 rg
/T1_1 1 Tf
(vector-ref)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(vector-set!)Tj
0 0 0 rg
/T1_0 1 Tf
( access and modify vector elements. )Tj
0 -1.205 TD
(The predicate for checking if something is a vector is )Tj
0 0 0.502 rg
/T1_1 1 Tf
(vector?)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
ET
48.361 149.841 m
254.975 149.841 l
S
0 0 1 rg
BT
/T1_3 1 Tf
15.956 0 0 15.956 48.3605 153.8619 Tm
(2.2.3 Dotted pairs and lists)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 116.0755 Tm
(A )Tj
/T1_4 1 Tf
(dotted pair)Tj
/T1_0 1 Tf
( is a compound value made by combining any two arbitrary values into an \
)Tj
0 -1.2 TD
(ordered couple. The first element is called the )Tj
/T1_4 1 Tf
(car)Tj
/T1_0 1 Tf
(, the second element is called the )Tj
/T1_4 1 Tf
(cdr)Tj
/T1_0 1 Tf
(, and )Tj
0 -1.205 TD
(the combining procedure is )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cons)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\))Tj
ET
EMC
Q
endstream
endobj
547 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
0 0.502 0.502 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 82.9319 745.2644 Tm
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(Dotted pairs are not self-evaluating, and so to specify them directly as\
data \(ie, without )Tj
0 -1.205 TD
(producing them via a )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cons)Tj
0 0 0 rg
/T1_2 1 Tf
(-call\), one must explicitly quote them:)Tj
0.6 0 0 rg
/T1_0 1 Tf
2.5 -2.562 Td
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_0 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -2.4 TD
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\) )Tj
1 0 0 rg
/T1_3 1 Tf
(-->ERROR!!!)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.562 Td
(The accessor procedures are )Tj
0 0 0.502 rg
/T1_1 1 Tf
(car)Tj
0 0 0 rg
/T1_2 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cdr)Tj
0 0 0 rg
/T1_2 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_0 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
(\()Tj
0 0 0.502 rg
(car)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_0 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(cdr)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_0 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(The elements of a dotted pair can be replaced by the mutator procedures \
)Tj
0 0 0.502 rg
/T1_1 1 Tf
(set-car!)Tj
0 0 0 rg
/T1_2 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
0 -1.205 TD
(set-cdr!)Tj
0 0 0 rg
/T1_2 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(set-car!)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(set-cdr!)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0.502 rg
T*
(x)Tj
0 0.502 0.502 rg
/T1_0 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(Dotted pairs can contain other dotted pairs.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_0 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0.502 rg
0 -2.4 TD
(y)Tj
0 0.502 0.502 rg
/T1_0 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\) . )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(The )Tj
0 0 0.502 rg
/T1_1 1 Tf
(car)Tj
0 0 0 rg
/T1_2 1 Tf
( of the )Tj
0 0 0.502 rg
/T1_1 1 Tf
(car)Tj
0 0 0 rg
/T1_2 1 Tf
( of this list is )Tj
0 0.502 0 rg
/T1_1 1 Tf
(1)Tj
0 0 0 rg
/T1_2 1 Tf
(. The )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cdr)Tj
0 0 0 rg
/T1_2 1 Tf
( of the )Tj
0 0 0.502 rg
/T1_1 1 Tf
(car)Tj
0 0 0 rg
/T1_2 1 Tf
( of this list is )Tj
0 0.502 0 rg
/T1_1 1 Tf
(2)Tj
0 0 0 rg
/T1_2 1 Tf
(. Ie,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(car)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(car)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_0 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(cdr)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(car)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\))Tj
ET
EMC
Q
endstream
endobj
548 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
0 0.502 0.502 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 82.9319 745.2644 Tm
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(Scheme provides procedure abbreviations for cascaded compositions of the\
)Tj
0 0 0.502 rg
/T1_1 1 Tf
(car)Tj
0 0 0 rg
/T1_2 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cdr)Tj
0 0 0 rg
/T1_2 1 Tf
( )Tj
0 -1.205 TD
(procedures. Thus, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(caar)Tj
0 0 0 rg
/T1_2 1 Tf
( stands for ``)Tj
0 0 0.502 rg
/T1_1 1 Tf
(car)Tj
0 0 0 rg
/T1_2 1 Tf
( of )Tj
0 0 0.502 rg
/T1_1 1 Tf
(car)Tj
0 0 0 rg
/T1_2 1 Tf
( of'', and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cdar)Tj
0 0 0 rg
/T1_2 1 Tf
( stands for ``)Tj
0 0 0.502 rg
/T1_1 1 Tf
(cdr)Tj
0 0 0 rg
/T1_2 1 Tf
( of )Tj
0 0 0.502 rg
/T1_1 1 Tf
(car)Tj
0 0 0 rg
/T1_2 1 Tf
( )Tj
0 -1.2 TD
(of'', etc.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(caar)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_0 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(cdar)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_0 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0 0 0.502 rg
-2.5 -2.557 Td
(c...r)Tj
0 0 0 rg
/T1_2 1 Tf
(-style abbreviations for upto four cascades are guaranteed to exist. Thu\
s, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cadr)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
0 -1.205 TD
(cdadr)Tj
0 0 0 rg
/T1_2 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cdaddr)Tj
0 0 0 rg
/T1_2 1 Tf
( are all valid. )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cdadadr)Tj
0 0 0 rg
/T1_2 1 Tf
( might be pushing it.)Tj
0 -2.557 TD
(When nested dotting occurs along the second element, Scheme uses a speci\
al notation to )Tj
0 -1.2 TD
(represent the resulting expression:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0.502 0.502 rg
/T1_0 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(Ie, )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_2 1 Tf
( is an abbreviation for )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0 0 rg
/T1_2 1 Tf
(. The last )Tj
0 -1.205 TD
(cdr of this expression is )Tj
0 0.502 0 rg
/T1_1 1 Tf
(5)Tj
0 0 0 rg
/T1_2 1 Tf
(.)Tj
0 -2.557 TD
(Scheme provides a further abbreviation if the last cdr is a special obje\
ct called the )Tj
/T1_3 1 Tf
(empty )Tj
0 -1.205 TD
(list)Tj
/T1_2 1 Tf
(, which is represented by the expression )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\(\))Tj
0 0 0 rg
/T1_2 1 Tf
(. The empty list is not considered self-)Tj
0 -1.2 TD
(evaluating, and so one should quote it when supplying it as a value in a\
program:)Tj
0.6 0 0 rg
/T1_0 1 Tf
2.5 -2.562 Td
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\(\) )Tj
0 0.502 0.502 rg
/T1_0 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\))Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(The abbreviation for a dotted pair of the form )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( . \(\)\)\)\)\))Tj
0 0 0 rg
/T1_2 1 Tf
( is)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(This special kind of nested dotted pair is called a )Tj
/T1_3 1 Tf
(list)Tj
/T1_2 1 Tf
(. This particular list is four elements )Tj
T*
(long. It could have been created by saying)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_0 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\(\)\)\)\)\))Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(but Scheme provides a procedure called )Tj
0 0 0.502 rg
/T1_1 1 Tf
(list)Tj
0 0 0 rg
/T1_2 1 Tf
( that makes list creation more convenient. )Tj
0 0 0.502 rg
/T1_1 1 Tf
0 -1.205 TD
(list)Tj
0 0 0 rg
/T1_2 1 Tf
( takes any number of arguments and returns the list containing them:)Tj
ET
EMC
Q
endstream
endobj
549 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 82.9319 738.6443 Tm
(\()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(Indeed, if we know all the elements of a list, we can use )Tj
0.6 0 0 rg
/T1_1 1 Tf
(quote)Tj
0 0 0 rg
/T1_2 1 Tf
( to specify the list:)Tj
0.6 0 0 rg
/T1_1 1 Tf
2.5 -2.562 Td
(')Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(List elements can be accessed by index.)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(list-ref)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(list-ref)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(list-tail)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( \()Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(list-tail)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( \()Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0.502 rg
-2.5 -2.557 Td
(list-tail)Tj
0 0 0 rg
/T1_2 1 Tf
( returns the )Tj
/T1_3 1 Tf
(tail)Tj
/T1_2 1 Tf
( of the list starting from the given index.)Tj
0 -2.562 TD
(The predicates )Tj
0 0 0.502 rg
/T1_0 1 Tf
(pair?)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(list?)Tj
0 0 0 rg
/T1_2 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_0 1 Tf
(null?)Tj
0 0 0 rg
/T1_2 1 Tf
( check if their argument is a dotted pair, list, or )Tj
0 -1.2 TD
(the empty list, respectively:)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(pair?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(pair?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(pair?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
(\(\)\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(list?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
(\(\)\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(null?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
(\(\)\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(list?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(list?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(null?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(null?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
ET
0 0 1 RG
1.34 w 10 M 0 j 0 J []0 d
48.361 167.39 m
340.994 167.39 l
S
0 0 1 rg
BT
/T1_4 1 Tf
15.956 0 0 15.956 48.3605 171.4114 Tm
(2.2.4 Conversions between data types)Tj
0 0 0 rg
/T1_2 1 Tf
13.8286 0 0 13.8286 48.3605 133.625 Tm
(Scheme offers many procedures for converting among the data types. We al\
ready know )Tj
0 -1.205 TD
(how to convert between the character cases using )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char-downcase)Tj
0 0 0 rg
/T1_2 1 Tf
( and )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char-upcase)Tj
0 0 0 rg
/T1_2 1 Tf
(. )Tj
0 -1.205 TD
(Characters can be converted into integers using )Tj
0 0 0.502 rg
/T1_0 1 Tf
(char->integer)Tj
0 0 0 rg
/T1_2 1 Tf
(, and integers can be )Tj
0 -1.205 TD
(converted into characters using )Tj
0 0 0.502 rg
/T1_0 1 Tf
(integer->char)Tj
0 0 0 rg
/T1_2 1 Tf
(. \(The integer corresponding to a )Tj
0 -1.2 TD
(character is usually its ascii code.\))Tj
ET
EMC
Q
endstream
endobj
550 0 obj<>stream
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 13.8286 0 0 13.8286 82.9319 745.2644 Tm
(\()Tj
0 0 0.502 rg
(char->integer)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\d)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(100)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(integer->char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(50)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#\\2)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.552 Td
(Strings can be converted into the corresponding list of characters.)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string->list)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("hello")Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( \()Tj
0 0.502 0 rg
(#\\h)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\e)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\o)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(Other conversion procedures in the same vein are )Tj
0 0 0.502 rg
/T1_0 1 Tf
(list->string)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(vector->list)Tj
0 0 0 rg
/T1_2 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_0 1 Tf
0 -1.205 TD
(list->vector)Tj
0 0 0 rg
/T1_2 1 Tf
(.)Tj
0 -2.557 TD
(Numbers can be converted to strings:)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(number->string)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(16)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
("16")Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(Strings can be converted to numbers. If the string corresponds to no num\
ber, )Tj
0 0.502 0 rg
/T1_0 1 Tf
(#f)Tj
0 0 0 rg
/T1_2 1 Tf
( is returned.)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string->number)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("16")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(16)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(string->number)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Am I a hot number?")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0.502 rg
-2.5 -2.557 Td
(string->number)Tj
0 0 0 rg
/T1_2 1 Tf
( takes an optional second argument, the radix.)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string->number)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("16")Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(8)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
(14)Tj
0 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(because )Tj
0 0.502 0 rg
/T1_0 1 Tf
(16)Tj
0 0 0 rg
/T1_2 1 Tf
( in base 8 is the number fourteen.)Tj
0 -2.557 TD
(Symbols can be converted to strings, and vice versa:)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(symbol->string)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0 0 0.502 rg
/T1_0 1 Tf
(symbol)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0.502 0 rg
("symbol")Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(string->symbol)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("string")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_0 1 Tf
( )Tj
0 0 0.502 rg
(string)Tj
ET
0 0 1 RG
1.608 w 10 M 0 j 0 J []0 d
48.361 109.629 m
236.712 109.629 l
S
0 0 1 rg
BT
/T1_3 1 Tf
19.1473 0 0 19.1473 48.3605 114.454 Tm
(2.3 Other data types)Tj
0 0 0 rg
/T1_2 1 Tf
13.8286 0 0 13.8286 48.3605 75.6343 Tm
(Scheme contains some other data types. One is the )Tj
/T1_4 1 Tf
(procedure)Tj
/T1_2 1 Tf
(. We have already seen many )Tj
0 -1.205 TD
(procedures, eg, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(display)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(+)Tj
0 0 0 rg
/T1_2 1 Tf
(, )Tj
0 0 0.502 rg
/T1_0 1 Tf
(cons)Tj
0 0 0 rg
/T1_2 1 Tf
(. In reality, these are variables holding the procedure )Tj
0 -1.2 TD
(values, which are themselves not visible as are numbers or characters:)Tj
ET
EMC
Q
endstream
endobj
551 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 275.1893 745.3309 Tm
([Go to )Tj
ET
0 0 1 RG
0.631 w 10 M 0 j 0 J []0 d
315.14 743.439 m
337.432 743.439 l
S
0 0 1 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 315.14 745.3309 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
344.346 743.439 m
391.972 743.439 l
S
0 0 1 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 344.346 745.3309 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
398.886 743.439 m
421.924 743.439 l
S
0 0 1 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 398.8859 745.3309 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
467.241 743.439 m
513.331 743.439 l
S
0 0 1 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 467.2405 745.3309 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
528.307 743.439 m
558.26 743.439 l
S
0 0 1 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 528.3075 745.3309 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
2.055 w
48.361 692.268 m
161.197 692.268 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.4659 0 0 24.4659 48.3605 698.4336 Tm
(Chapter 2)Tj
0 0 0 rg
0 -1.948 TD
( )Tj
ET
48.361 617.7 m
172.085 617.7 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.4659 0 0 24.4659 48.3605 623.8656 Tm
(Data types)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 583.3239 Tm
(A )Tj
/T1_1 1 Tf
(data type)Tj
/T1_0 1 Tf
( is a collection of related values. These collections need not be disjoi\
nt, and they )Tj
0 -1.2 TD
(are often hierarchical. Scheme has a rich set of data types: some are si\
mple \(indivisible\) )Tj
T*
(data types and others are compound data types made by combining other da\
ta types.)Tj
ET
1.608 w
48.361 505.049 m
248.43 505.049 l
S
0 0 1 rg
BT
/T1_2 1 Tf
19.1473 0 0 19.1473 48.3605 509.8737 Tm
(2.1 Simple data types)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 471.0541 Tm
(The simple data types of Scheme include booleans, numbers, characters, a\
nd symbols.)Tj
ET
1.34 w
48.361 429.568 m
164.536 429.568 l
S
0 0 1 rg
BT
/T1_2 1 Tf
15.956 0 0 15.956 48.3605 433.5887 Tm
(2.1.1 Booleans)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 395.7358 Tm
(Scheme's booleans are )Tj
0 0.502 0 rg
/T1_3 1 Tf
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
( for true and )Tj
0 0.502 0 rg
/T1_3 1 Tf
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
( for false. Scheme has a predicate procedure )Tj
0 -1.205 TD
(called )Tj
0 0 0.502 rg
/T1_3 1 Tf
(boolean?)Tj
0 0 0 rg
/T1_0 1 Tf
( that checks if its argument is boolean.)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(boolean?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_4 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(boolean?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_4 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The procedure )Tj
0 0 0.502 rg
/T1_3 1 Tf
(not)Tj
0 0 0 rg
/T1_0 1 Tf
( negates its argument, considered as a boolean.)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(not)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_4 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(not)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_4 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(not)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_4 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(The last expression illustrates a Scheme convenience: In a context that \
requires a boolean, )Tj
0 -1.205 TD
(Scheme will treat any value that is not )Tj
0 0.502 0 rg
/T1_3 1 Tf
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
( as a true value.)Tj
ET
48.361 129.632 m
161.872 129.632 l
S
0 0 1 rg
BT
/T1_2 1 Tf
15.956 0 0 15.956 48.3605 133.6527 Tm
(2.1.2 Numbers)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 95.7997 Tm
(Scheme numbers can be integers \(eg, )Tj
0 0.502 0 rg
/T1_3 1 Tf
(42)Tj
0 0 0 rg
/T1_0 1 Tf
(\), rationals \()Tj
0 0.502 0 rg
/T1_3 1 Tf
(22/7)Tj
0 0 0 rg
/T1_0 1 Tf
(\), reals \()Tj
0 0.502 0 rg
/T1_3 1 Tf
(3.1416)Tj
0 0 0 rg
/T1_0 1 Tf
(\), or complex \()Tj
0 0.502 0 rg
/T1_3 1 Tf
(2)Tj
0 -1.205 TD
(+3i)Tj
0 0 0 rg
/T1_0 1 Tf
(\). An integer is a rational is a real is a complex number is a number. \
Predicates exist for )Tj
0 -1.2 TD
(testing the various kinds of numberness:)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(1 o\
f 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
552 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 82.9319 745.2644 Tm
(\()Tj
0 0 0.502 rg
(number?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(number?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(complex?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2+3i)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(real?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2+3i)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(real?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3.1416)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(real?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(22/7)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(real?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(rational?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2+3i)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(rational?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3.1416)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(rational?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(22/7)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(integer?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(22/7)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(integer?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Scheme integers need not be specified in decimal \(base 10\) format. The\
y can be specified in )Tj
0 -1.205 TD
(binary by prefixing the numeral with )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#b)Tj
0 0 0 rg
/T1_0 1 Tf
(. Thus )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#b1100)Tj
0 0 0 rg
/T1_0 1 Tf
( is the number twelve. The octal )Tj
0 -1.205 TD
(prefix is )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#o)Tj
0 0 0 rg
/T1_0 1 Tf
( and the hex prefix is )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#x)Tj
0 0 0 rg
/T1_0 1 Tf
(. \(The optional decimal prefix is )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#d)Tj
0 0 0 rg
/T1_0 1 Tf
(.\))Tj
0 -2.562 TD
(Numbers can tested for equality using the general-purpose equality predi\
cate )Tj
0 0 0.502 rg
/T1_1 1 Tf
(eqv?)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(eqv?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(eqv?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(eqv?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42.0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(However, if you know that the arguments to be compared are numbers, the \
special number-)Tj
0 -1.205 TD
(equality predicate )Tj
0 0 0.502 rg
/T1_1 1 Tf
(=)Tj
0 0 0 rg
/T1_0 1 Tf
( is more apt.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
(\) )Tj
1 0 0 rg
/T1_3 1 Tf
(-->ERROR!!!)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
0 -1.205 TD
(\()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42.0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Other number comparisons allowed are )Tj
0 0 0.502 rg
/T1_1 1 Tf
(<)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(<=)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(>)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(>=)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(<)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(>=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4.5)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Arithmetic procedures )Tj
0 0 0.502 rg
/T1_1 1 Tf
(+)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(-)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(*)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(/)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(expt)Tj
0 0 0 rg
/T1_0 1 Tf
( have the expected behavior:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(6)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5.3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(3.3)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(*)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(6)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(/)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(6)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(2 o\
f 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
553 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0 0 0.502 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 82.9319 728.3795 Tm
(cons)Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
()Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(The procedures we have seen thus far are )Tj
/T1_3 1 Tf
(primitive)Tj
/T1_0 1 Tf
( procedures, with standard global )Tj
T*
(variables holding them. Users can create additional procedure values.)Tj
0 -2.557 TD
(Yet another data type is the )Tj
/T1_3 1 Tf
(port)Tj
/T1_0 1 Tf
(. A port is the conduit through which input and output is )Tj
0 -1.2 TD
(performed. Ports are usually associated with files and consoles.)Tj
0 -2.562 TD
(In our ``Hello, World!'' program, we used the procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(display)Tj
0 0 0 rg
/T1_0 1 Tf
( to write a string to the )Tj
0 -1.205 TD
(console. )Tj
0 0 0.502 rg
/T1_1 1 Tf
(display)Tj
0 0 0 rg
/T1_0 1 Tf
( can take two arguments, one the value to be displayed, and the other th\
e )Tj
0 -1.2 TD
(output port it should be displayed on.)Tj
0 -2.562 TD
(In our program, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(display)Tj
0 0 0 rg
/T1_0 1 Tf
('s second argument was implicit. The default output port used is )Tj
0 -1.2 TD
(the standard output port. We can get the current standard output port vi\
a the procedure-call )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
0 -1.205 TD
(\()Tj
0 0 0.502 rg
(current-output-port)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
(. We could have been more explicit and written)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(current-output-port)Tj
0.647 0.165 0.165 rg
(\)\))Tj
ET
0 0 1 RG
1.608 w 10 M 0 j 0 J []0 d
48.361 390.125 m
216.512 390.125 l
S
0 0 1 rg
BT
/T1_4 1 Tf
19.1473 0 0 19.1473 48.3605 394.9501 Tm
(2.4 S-expressions)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 356.1304 Tm
(All the data types discussed here can be lumped together into a single a\
ll-encompassing data )Tj
T*
(type called the )Tj
/T1_3 1 Tf
(s-expression)Tj
/T1_0 1 Tf
( \()Tj
/T1_3 1 Tf
(s)Tj
/T1_0 1 Tf
( for )Tj
/T1_3 1 Tf
(symbolic)Tj
/T1_0 1 Tf
(\). Thus )Tj
0 0.502 0 rg
/T1_1 1 Tf
(42)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#\\c)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#)Tj
0.647 0.165 0.165 rg
(\()Tj
0 0 0.502 rg
(a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(b)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(c)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0.502 0 rg
/T1_1 1 Tf
0 -1.205 TD
("Hello")Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(quote)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(xyz)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0 0.502 rg
(string->number)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("16")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
0 -1.205 TD
("Hello, World!")Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
( are all s-expressions. )Tj
1 0 0 rg
/T1_3 1 Tf
16.403 -2.557 Td
([Go to )Tj
ET
0.631 w
315.14 268.894 m
337.432 268.894 l
S
0 0 1 rg
BT
/T1_3 1 Tf
13.8286 0 0 13.8286 315.14 270.7862 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
344.346 268.894 m
391.972 268.894 l
S
0 0 1 rg
BT
/T1_3 1 Tf
13.8286 0 0 13.8286 344.346 270.7862 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
398.886 268.894 m
421.924 268.894 l
S
0 0 1 rg
BT
/T1_3 1 Tf
13.8286 0 0 13.8286 398.8859 270.7862 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
467.241 268.894 m
513.331 268.894 l
S
0 0 1 rg
BT
/T1_3 1 Tf
13.8286 0 0 13.8286 467.2405 270.7862 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
528.307 268.894 m
558.26 268.894 l
S
0 0 1 rg
BT
/T1_3 1 Tf
13.8286 0 0 13.8286 528.3075 270.7862 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(12 \
of 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
554 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 82.9319 745.2644 Tm
(\()Tj
0 0 0.502 rg
(/)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(22)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(7)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(22/7)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(expt)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(8)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(expt)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1/2)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(2.0)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(For a single argument, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(-)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(/)Tj
0 0 0 rg
/T1_0 1 Tf
( return the negation and the reciprocal respectively:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(-4)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(/)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1/4)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The procedures )Tj
0 0 0.502 rg
/T1_1 1 Tf
(max)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(min)Tj
0 0 0 rg
/T1_0 1 Tf
( return the maximum and minimum respectively of the )Tj
T*
(number arguments supplied to them. Any number of arguments can be so sup\
plied.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(max)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(min)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(abs)Tj
0 0 0 rg
/T1_0 1 Tf
( returns the absolute value of its argument.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(abs)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(abs)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(-4)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(4)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(This is just the tip of the iceberg. Scheme provides a large and compreh\
ensive suite of )Tj
0 -1.205 TD
(arithmetic and trigonometric procedures. For instance, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(atan)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(exp)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(sqrt)Tj
0 0 0 rg
/T1_0 1 Tf
( respectively )Tj
0 -1.2 TD
(return the arctangent, natural antilogarithm, and square root of their a\
rgument. Consult )Tj
T*
(R5RS [)Tj
ET
0 0 1 RG
0.697 w 10 M 0 j 0 J []0 d
89.473 346.094 m
103.301 346.094 l
S
0 0 1 rg
BT
/T1_0 1 Tf
13.8286 0 0 13.8286 89.4729 348.1846 Tm
(23)Tj
0 0 0 rg
(] for more details.)Tj
ET
1.34 w
48.361 304.723 m
176.073 304.723 l
S
0 0 1 rg
BT
/T1_3 1 Tf
15.956 0 0 15.956 48.3605 308.7437 Tm
(2.1.3 Characters)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 270.8908 Tm
(Scheme character data are represented by prefixing the character with )Tj
/T1_1 1 Tf
(#\\)Tj
/T1_0 1 Tf
(. Thus, )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#\\c)Tj
0 0 0 rg
/T1_0 1 Tf
( is the )Tj
0 -1.205 TD
(character )Tj
/T1_1 1 Tf
(c)Tj
/T1_0 1 Tf
(. Some non-graphic characters have more descriptive names, eg, )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#\\newline)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#)Tj
T*
(\\tab)Tj
0 0 0 rg
/T1_0 1 Tf
(. The character for space can be written )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#\\ )Tj
0 0 0 rg
/T1_0 1 Tf
( , or more readably, )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#\\space)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.562 TD
(The character predicate is )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char?)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(char?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\c)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(char?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(char?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\;)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Note that a semicolon character datum does not trigger a comment.)Tj
0 -2.562 TD
(The character data type has its set of comparison predicates: )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char=?)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char<=?)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
0 -1.205 TD
(char>?)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char>=?)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(3 o\
f 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
555 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 82.9319 732.1403 Tm
(\()Tj
0 0 0.502 rg
(char=?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\b)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(char>=?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\b)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(To make the comparisons case-insensitive, use )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char-ci)Tj
0 0 0 rg
/T1_0 1 Tf
( instead of )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char)Tj
0 0 0 rg
/T1_0 1 Tf
( in the procedure )Tj
0 -1.2 TD
(name:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(char-ci=?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\A)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(char-ci)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\B)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The case conversion procedures are )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char-downcase)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char-upcase)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(char-downcase)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\A)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(char-upcase)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#\\A)Tj
ET
0 0 1 RG
1.34 w 10 M 0 j 0 J []0 d
48.361 466.169 m
159.223 466.169 l
S
0 0 1 rg
BT
/T1_3 1 Tf
15.956 0 0 15.956 48.3605 470.1903 Tm
(2.1.4 Symbols)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 432.4039 Tm
(The simple data types we saw above are )Tj
/T1_4 1 Tf
(self-evaluating)Tj
/T1_0 1 Tf
(. Ie, if you typed any object from )Tj
0 -1.2 TD
(these data types to the listener, the evaluated result returned by the l\
istener will be the same )Tj
T*
(as what you typed in.)Tj
0 0.502 0 rg
/T1_1 1 Tf
2.5 -2.562 Td
(#t)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 -1.2 TD
(42)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(42)Tj
T*
(#\\c)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#\\c)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Symbols don't behave the same way. This is because symbols are used by S\
cheme programs )Tj
0 -1.2 TD
(as )Tj
/T1_4 1 Tf
(identifiers)Tj
/T1_0 1 Tf
( for )Tj
/T1_4 1 Tf
(variables)Tj
/T1_0 1 Tf
(, and thus will evaluate to the value that the variable holds. )Tj
T*
(Nevertheless, symbols are a simple data type, and symbols are legitimate\
values that )Tj
T*
(Scheme can traffic in, along with characters, numbers, and the rest.)Tj
0 -2.557 TD
(To specify a symbol without making Scheme think it is a variable, you sh\
ould )Tj
/T1_4 1 Tf
(quote)Tj
/T1_0 1 Tf
( the )Tj
0 -1.2 TD
(symbol:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(quote)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(xyz)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Since this type of quoting is very common in Scheme, a convenient abbrev\
iation is )Tj
T*
(provided. The expression)Tj
0.6 0 0 rg
/T1_2 1 Tf
2.5 -2.562 Td
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(E)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(4 o\
f 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
556 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 740.3582 Tm
(will be treated by Scheme as equivalent to)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(quote)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(E)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Scheme symbols are named by a sequence of characters. About the only lim\
itation on a )Tj
0 -1.2 TD
(symbol's name is that it shouldn't be mistakable for some other data, eg\
, characters or )Tj
0 -1.205 TD
(booleans or numbers or compound data. Thus, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(this-is-a-symbol)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(i18n)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(<=>)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_1 1 Tf
($!)Tj
0 -1.205 TD
(#*)Tj
0 0 0 rg
/T1_0 1 Tf
( are all symbols; )Tj
0 0.502 0 rg
/T1_1 1 Tf
(16)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0.502 0 rg
/T1_1 1 Tf
(-i)Tj
0 0 0 rg
/T1_0 1 Tf
( \(a complex number!\), )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0.502 0 rg
/T1_1 1 Tf
("this-is-a-string")Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
0 -1.205 TD
(\()Tj
0 0 0.502 rg
(barf)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
( \(a list\) are not. The predicate for checking symbolness is called )Tj
0 0 0.502 rg
/T1_1 1 Tf
(symbol?)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(symbol?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(xyz)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(symbol?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(42)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Scheme symbols are normally case-insensitive. Thus the symbols )Tj
0 0 0.502 rg
/T1_1 1 Tf
(Calorie)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(calorie)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
T*
(are identical:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(eqv?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(Calorie)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(calorie)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(We can use the symbol )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
( as a global variable by using the form )Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(xyz)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(This says the variable )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
( holds the value )Tj
0 0.502 0 rg
/T1_1 1 Tf
(9)Tj
0 0 0 rg
/T1_0 1 Tf
(. If we feed )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
( to the listener, the result will )Tj
0 -1.205 TD
(be the value held by )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0 0 0.502 rg
/T1_1 1 Tf
2.5 -2.562 Td
(xyz)Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(9)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(We can use the form )Tj
0.6 0 0 rg
/T1_2 1 Tf
(set!)Tj
0 0 0 rg
/T1_0 1 Tf
( to )Tj
/T1_3 1 Tf
(change)Tj
/T1_0 1 Tf
( the value held by a variable:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(xyz)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\c)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Now)Tj
0 0 0.502 rg
/T1_1 1 Tf
2.5 -2.562 Td
(xyz)Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#\\c)Tj
ET
0 0 1 RG
1.608 w 10 M 0 j 0 J []0 d
48.361 69.095 m
286.686 69.095 l
S
0 0 1 rg
BT
/T1_4 1 Tf
19.1473 0 0 19.1473 48.3605 73.9198 Tm
(2.2 Compound data types)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(5 o\
f 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
557 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 745.3309 Tm
(Compound data types are built by combining values from other data types \
in structured )Tj
0 -1.2 TD
(ways.)Tj
ET
0 0 1 RG
1.34 w 10 M 0 j 0 J []0 d
48.361 687.25 m
147.687 687.25 l
S
0 0 1 rg
BT
/T1_1 1 Tf
15.956 0 0 15.956 48.3605 691.2713 Tm
(2.2.1 Strings)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 653.4849 Tm
(Strings are sequences of characters \(not to be confused with symbols, w\
hich are simple data )Tj
T*
(that have a sequence of characters as their name\). You can specify stri\
ngs by enclosing the )Tj
T*
(constituent characters in double-quotes. Strings evaluate to themselves.\
)Tj
0 0.502 0 rg
/T1_2 1 Tf
2.5 -2.562 Td
("Hello, World!")Tj
0 0.502 0.502 rg
/T1_3 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
("Hello, World!")Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The procedure )Tj
0 0 0.502 rg
/T1_2 1 Tf
(string)Tj
0 0 0 rg
/T1_0 1 Tf
( takes a bunch of characters and returns the string made from them:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\h)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\e)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\o)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_3 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
("hello")Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Let us now define a global variable )Tj
0 0 0.502 rg
/T1_2 1 Tf
(greeting)Tj
0 0 0 rg
/T1_0 1 Tf
(. )Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(greeting)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Hello; Hello!")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Note that a semicolon inside a string datum does not trigger a comment.)Tj
0 -2.557 TD
(The characters in a given string can be individually accessed and modifi\
ed. The procedure )Tj
0 0 0.502 rg
/T1_2 1 Tf
0 -1.205 TD
(string-ref)Tj
0 0 0 rg
/T1_0 1 Tf
( takes a string and a \(0-based\) index, and returns the character at th\
at index:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string-ref)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(greeting)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_3 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(#\\H)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(New strings can be created by appending other strings:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string-append)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("E ")Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( )Tj
0 0.502 0 rg
("Pluribus ")Tj
0.647 0.165 0.165 rg
T*
( )Tj
0 0.502 0 rg
("Unum")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_3 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
("E Pluribus Unum")Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(You can make a string of a specified length, and fill it with the desire\
d characters later.)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(a-3-char-long-string)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(make-string)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The predicate for checking stringness is )Tj
0 0 0.502 rg
/T1_2 1 Tf
(string?)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(6 o\
f 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
558 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 730.1691 Tm
(Strings obtained as a result of calls to )Tj
0 0 0.502 rg
/T1_1 1 Tf
(string)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(make-string)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(string-append)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.205 TD
(are mutable. The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(string-set!)Tj
0 0 0 rg
/T1_0 1 Tf
( replaces the character at a given index:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(hello)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(string)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\H)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\e)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\o)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0 0.502 rg
0 -1.2 TD
(hello)Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
("Hello")Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(string-set!)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(hello)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0.502 rg
0 -1.2 TD
(hello)Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
("Hallo")Tj
ET
0 0 1 RG
1.34 w 10 M 0 j 0 J []0 d
48.361 537.095 m
151.245 537.095 l
S
0 0 1 rg
BT
/T1_3 1 Tf
15.956 0 0 15.956 48.3605 541.1155 Tm
(2.2.2 Vectors)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 503.3291 Tm
(Vectors are sequences like strings, but their elements can be anything, \
not just characters. )Tj
0 -1.2 TD
(Indeed, the elements can be vectors themselves, which is a good way to g\
enerate )Tj
T*
(multidimensional vectors.)Tj
0 -2.557 TD
(Here's a way to create a vector of the first five integers:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(vector)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#)Tj
0.647 0.165 0.165 rg
(\()Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Note Scheme's representation of a vector value: a )Tj
/T1_1 1 Tf
(#)Tj
/T1_0 1 Tf
( character followed by the vector's )Tj
T*
(contents enclosed in parentheses.)Tj
0 -2.562 TD
(In analogy with )Tj
0 0 0.502 rg
/T1_1 1 Tf
(make-string)Tj
0 0 0 rg
/T1_0 1 Tf
(, the procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(make-vector)Tj
0 0 0 rg
/T1_0 1 Tf
( makes a vector of a )Tj
0 -1.2 TD
(specific length:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(v)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(make-vector)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The procedures )Tj
0 0 0.502 rg
/T1_1 1 Tf
(vector-ref)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(vector-set!)Tj
0 0 0 rg
/T1_0 1 Tf
( access and modify vector elements. )Tj
0 -1.205 TD
(The predicate for checking if something is a vector is )Tj
0 0 0.502 rg
/T1_1 1 Tf
(vector?)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
ET
48.361 149.841 m
254.975 149.841 l
S
0 0 1 rg
BT
/T1_3 1 Tf
15.956 0 0 15.956 48.3605 153.8619 Tm
(2.2.3 Dotted pairs and lists)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 116.0755 Tm
(A )Tj
/T1_4 1 Tf
(dotted pair)Tj
/T1_0 1 Tf
( is a compound value made by combining any two arbitrary values into an \
)Tj
0 -1.2 TD
(ordered couple. The first element is called the )Tj
/T1_4 1 Tf
(car)Tj
/T1_0 1 Tf
(, the second element is called the )Tj
/T1_4 1 Tf
(cdr)Tj
/T1_0 1 Tf
(, and )Tj
0 -1.205 TD
(the combining procedure is )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cons)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(7 o\
f 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
559 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0 0.502 0.502 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 82.9319 745.2644 Tm
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Dotted pairs are not self-evaluating, and so to specify them directly as\
data \(ie, without )Tj
0 -1.205 TD
(producing them via a )Tj
0 0 0.502 rg
/T1_2 1 Tf
(cons)Tj
0 0 0 rg
/T1_0 1 Tf
(-call\), one must explicitly quote them:)Tj
0.6 0 0 rg
/T1_1 1 Tf
2.5 -2.562 Td
(')Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -2.4 TD
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\) )Tj
1 0 0 rg
/T1_3 1 Tf
(-->ERROR!!!)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.562 Td
(The accessor procedures are )Tj
0 0 0.502 rg
/T1_2 1 Tf
(car)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_2 1 Tf
(cdr)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
(\()Tj
0 0 0.502 rg
(car)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(cdr)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The elements of a dotted pair can be replaced by the mutator procedures \
)Tj
0 0 0.502 rg
/T1_2 1 Tf
(set-car!)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_2 1 Tf
0 -1.205 TD
(set-cdr!)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(set-car!)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(set-cdr!)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0.502 rg
0 -2.4 TD
(x)Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Dotted pairs can contain other dotted pairs.)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0.502 rg
0 -2.4 TD
(y)Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\) . )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The )Tj
0 0 0.502 rg
/T1_2 1 Tf
(car)Tj
0 0 0 rg
/T1_0 1 Tf
( of the )Tj
0 0 0.502 rg
/T1_2 1 Tf
(car)Tj
0 0 0 rg
/T1_0 1 Tf
( of this list is )Tj
0 0.502 0 rg
/T1_2 1 Tf
(1)Tj
0 0 0 rg
/T1_0 1 Tf
(. The )Tj
0 0 0.502 rg
/T1_2 1 Tf
(cdr)Tj
0 0 0 rg
/T1_0 1 Tf
( of the )Tj
0 0 0.502 rg
/T1_2 1 Tf
(car)Tj
0 0 0 rg
/T1_0 1 Tf
( of this list is )Tj
0 0.502 0 rg
/T1_2 1 Tf
(2)Tj
0 0 0 rg
/T1_0 1 Tf
(. Ie,)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(car)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(car)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(cdr)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(car)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(8 o\
f 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
560 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0 0.502 0.502 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 82.9319 745.2644 Tm
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Scheme provides procedure abbreviations for cascaded compositions of the\
)Tj
0 0 0.502 rg
/T1_2 1 Tf
(car)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_2 1 Tf
(cdr)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.205 TD
(procedures. Thus, )Tj
0 0 0.502 rg
/T1_2 1 Tf
(caar)Tj
0 0 0 rg
/T1_0 1 Tf
( stands for ``)Tj
0 0 0.502 rg
/T1_2 1 Tf
(car)Tj
0 0 0 rg
/T1_0 1 Tf
( of )Tj
0 0 0.502 rg
/T1_2 1 Tf
(car)Tj
0 0 0 rg
/T1_0 1 Tf
( of'', and )Tj
0 0 0.502 rg
/T1_2 1 Tf
(cdar)Tj
0 0 0 rg
/T1_0 1 Tf
( stands for ``)Tj
0 0 0.502 rg
/T1_2 1 Tf
(cdr)Tj
0 0 0 rg
/T1_0 1 Tf
( of )Tj
0 0 0.502 rg
/T1_2 1 Tf
(car)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.2 TD
(of'', etc.)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(caar)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(cdar)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0 0 0.502 rg
-2.5 -2.557 Td
(c...r)Tj
0 0 0 rg
/T1_0 1 Tf
(-style abbreviations for upto four cascades are guaranteed to exist. Thu\
s, )Tj
0 0 0.502 rg
/T1_2 1 Tf
(cadr)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_2 1 Tf
0 -1.205 TD
(cdadr)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_2 1 Tf
(cdaddr)Tj
0 0 0 rg
/T1_0 1 Tf
( are all valid. )Tj
0 0 0.502 rg
/T1_2 1 Tf
(cdadadr)Tj
0 0 0 rg
/T1_0 1 Tf
( might be pushing it.)Tj
0 -2.557 TD
(When nested dotting occurs along the second element, Scheme uses a speci\
al notation to )Tj
0 -1.2 TD
(represent the resulting expression:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Ie, )Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
( is an abbreviation for )Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
(. The last )Tj
0 -1.205 TD
(cdr of this expression is )Tj
0 0.502 0 rg
/T1_2 1 Tf
(5)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.557 TD
(Scheme provides a further abbreviation if the last cdr is a special obje\
ct called the )Tj
/T1_3 1 Tf
(empty )Tj
0 -1.205 TD
(list)Tj
/T1_0 1 Tf
(, which is represented by the expression )Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\(\))Tj
0 0 0 rg
/T1_0 1 Tf
(. The empty list is not considered self-)Tj
0 -1.2 TD
(evaluating, and so one should quote it when supplying it as a value in a\
program:)Tj
0.6 0 0 rg
/T1_1 1 Tf
2.5 -2.562 Td
(')Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The abbreviation for a dotted pair of the form )Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( . \()Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( . \(\)\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
( is)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(This special kind of nested dotted pair is called a )Tj
/T1_3 1 Tf
(list)Tj
/T1_0 1 Tf
(. This particular list is four elements )Tj
T*
(long. It could have been created by saying)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\(\)\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(but Scheme provides a procedure called )Tj
0 0 0.502 rg
/T1_2 1 Tf
(list)Tj
0 0 0 rg
/T1_0 1 Tf
( that makes list creation more convenient. )Tj
0 0 0.502 rg
/T1_2 1 Tf
0 -1.205 TD
(list)Tj
0 0 0 rg
/T1_0 1 Tf
( takes any number of arguments and returns the list containing them:)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(9 o\
f 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
561 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 82.9319 738.6443 Tm
(\()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Indeed, if we know all the elements of a list, we can use )Tj
0.6 0 0 rg
/T1_2 1 Tf
(quote)Tj
0 0 0 rg
/T1_0 1 Tf
( to specify the list:)Tj
0.6 0 0 rg
/T1_2 1 Tf
2.5 -2.562 Td
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(List elements can be accessed by index.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(list-ref)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(list-ref)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(list-tail)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(list-tail)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0.502 rg
-2.5 -2.557 Td
(list-tail)Tj
0 0 0 rg
/T1_0 1 Tf
( returns the )Tj
/T1_3 1 Tf
(tail)Tj
/T1_0 1 Tf
( of the list starting from the given index.)Tj
0 -2.562 TD
(The predicates )Tj
0 0 0.502 rg
/T1_1 1 Tf
(pair?)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(list?)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(null?)Tj
0 0 0 rg
/T1_0 1 Tf
( check if their argument is a dotted pair, list, or )Tj
0 -1.2 TD
(the empty list, respectively:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(pair?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(pair?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(pair?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\(\)\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(list?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\(\)\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(null?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\(\)\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(list?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(list?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(null?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(null?)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
ET
0 0 1 RG
1.34 w 10 M 0 j 0 J []0 d
48.361 167.39 m
340.994 167.39 l
S
0 0 1 rg
BT
/T1_4 1 Tf
15.956 0 0 15.956 48.3605 171.4114 Tm
(2.2.4 Conversions between data types)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 133.625 Tm
(Scheme offers many procedures for converting among the data types. We al\
ready know )Tj
0 -1.205 TD
(how to convert between the character cases using )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char-downcase)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char-upcase)Tj
0 0 0 rg
/T1_0 1 Tf
(. )Tj
T*
(Characters can be converted into integers using )Tj
0 0 0.502 rg
/T1_1 1 Tf
(char->integer)Tj
0 0 0 rg
/T1_0 1 Tf
(, and integers can be )Tj
0 -1.205 TD
(converted into characters using )Tj
0 0 0.502 rg
/T1_1 1 Tf
(integer->char)Tj
0 0 0 rg
/T1_0 1 Tf
(. \(The integer corresponding to a )Tj
0 -1.2 TD
(character is usually its ascii code.\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(10 \
of 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
562 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.8898 0 0 8.8898 18 780.2536 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
13.8286 0 0 13.8286 82.9319 745.2644 Tm
(\()Tj
0 0 0.502 rg
(char->integer)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\d)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(100)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(integer->char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(50)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#\\2)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Strings can be converted into the corresponding list of characters.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string->list)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("hello")Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(#\\h)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\e)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\o)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Other conversion procedures in the same vein are )Tj
0 0 0.502 rg
/T1_1 1 Tf
(list->string)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(vector->list)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_1 1 Tf
0 -1.205 TD
(list->vector)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.557 TD
(Numbers can be converted to strings:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(number->string)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(16)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
("16")Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Strings can be converted to numbers. If the string corresponds to no num\
ber, )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
( is returned.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string->number)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("16")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(16)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(string->number)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("Am I a hot number?")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0.502 rg
-2.5 -2.557 Td
(string->number)Tj
0 0 0 rg
/T1_0 1 Tf
( takes an optional second argument, the radix.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(string->number)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("16")Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(8)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(14)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(because )Tj
0 0.502 0 rg
/T1_1 1 Tf
(16)Tj
0 0 0 rg
/T1_0 1 Tf
( in base 8 is the number fourteen.)Tj
0 -2.557 TD
(Symbols can be converted to strings, and vice versa:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(symbol->string)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(symbol)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
("symbol")Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(string->symbol)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("string")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(string)Tj
ET
0 0 1 RG
1.608 w 10 M 0 j 0 J []0 d
48.361 109.629 m
236.712 109.629 l
S
0 0 1 rg
BT
/T1_3 1 Tf
19.1473 0 0 19.1473 48.3605 114.454 Tm
(2.3 Other data types)Tj
0 0 0 rg
/T1_0 1 Tf
13.8286 0 0 13.8286 48.3605 75.6343 Tm
(Scheme contains some other data types. One is the )Tj
/T1_4 1 Tf
(procedure)Tj
/T1_0 1 Tf
(. We have already seen many )Tj
0 -1.205 TD
(procedures, eg, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(display)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(+)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(cons)Tj
0 0 0 rg
/T1_0 1 Tf
(. In reality, these are variables holding the procedure )Tj
0 -1.2 TD
(values, which are themselves not visible as are numbers or characters:)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.8898 0 0 8.8898 18 7.2536 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html \(11 \
of 12\)11/3/2006 8:46:36 PM)Tj
ET
EMC
endstream
endobj
563 0 obj(Teach Yourself Scheme in Fixnum Days )
endobj
564 0 obj<>
endobj
565 0 obj(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-4.html)
endobj
566 0 obj(«\nYÊ› c×òŒOý¿g¤\\)
endobj
567 0 obj<>
endobj
568 0 obj<>
endobj
569 0 obj(ÃQ]ÿ×øcWDÅÇÅâM½)
endobj
570 0 obj<>
endobj
571 0 obj<>
endobj
572 0 obj<><><>]/P 9 0 R/S/Article/T()/Pg 573 0 R>>
endobj
573 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
574 0 obj[572 0 R]
endobj
575 0 obj<>/A<>/Border[0 0 0]>>
endobj
576 0 obj[575 0 R 577 0 R 578 0 R 579 0 R 580 0 R 582 0 R 583 0 R 587 0 R]
endobj
577 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
578 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
579 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
580 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
581 0 obj[573 0 R/XYZ 0 719.2 null]
endobj
582 0 obj<>/A<0; únode_toc_node_chap_3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
583 0 obj<>/A<0; únode_toc_node_chap_3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
584 0 obj[573 0 R/XYZ 0 175.978 null]
endobj
585 0 obj[573 0 R/XYZ 0 175.978 null]
endobj
586 0 obj[573 0 R/XYZ 0 175.978 null]
endobj
587 0 obj<>/A<0; únode_toc_node_sec_3.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
588 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
589 0 obj[572 0 R]
endobj
590 0 obj[588 0 R/XYZ 0 397.912 null]
endobj
591 0 obj[588 0 R/XYZ 0 397.912 null]
endobj
592 0 obj<>/A<0; únode_toc_node_sec_3.1.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
593 0 obj[592 0 R]
endobj
594 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
595 0 obj[572 0 R]
endobj
596 0 obj[594 0 R/XYZ 0 721.2 null]
endobj
597 0 obj<>/A<0; únode_toc_node_sec_3.1.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
598 0 obj[597 0 R 601 0 R 604 0 R]
endobj
599 0 obj[594 0 R/XYZ 0 525.013 null]
endobj
600 0 obj[594 0 R/XYZ 0 525.013 null]
endobj
601 0 obj<>/A<0; únode_toc_node_sec_3.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
602 0 obj[594 0 R/XYZ 0 219.574 null]
endobj
603 0 obj[594 0 R/XYZ 0 219.574 null]
endobj
604 0 obj<>/A<0; únode_toc_node_sec_3.3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
605 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
606 0 obj[572 0 R]
endobj
607 0 obj[605 0 R/XYZ 0 637.2 null]
endobj
608 0 obj<>/A<>/Border[0 0 0]>>
endobj
609 0 obj[608 0 R 610 0 R 611 0 R 612 0 R 613 0 R]
endobj
610 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
611 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
612 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
613 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
614 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
BT
/T1_1 1 Tf
14 0 0 14 271.014 744.9756 Tm
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 743.06 m
334.028 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 311.46 744.9756 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 743.06 m
389.244 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 341.028 744.9756 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 743.06 m
419.568 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 396.244 744.9756 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 743.06 m
512.108 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 465.446 744.9756 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 743.06 m
557.594 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 527.27 744.9756 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
2.081 w
48.96 691.255 m
163.196 691.255 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 697.4968 Tm
(Chapter 3)Tj
0 0 0 rg
0 -1.948 TD
( )Tj
ET
48.96 615.763 m
124.655 615.763 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 622.0045 Tm
(Forms)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 580.9602 Tm
(The reader will have noted that the Scheme example programs provided thu\
s far are also s-)Tj
0 -1.2 TD
(expressions. This is true of all Scheme programs: Programs are data.)Tj
0 -2.562 TD
(Thus, the character datum )Tj
0 0.502 0 rg
/T1_3 1 Tf
(#\\c)Tj
0 0 0 rg
/T1_0 1 Tf
( is a program, or a )Tj
/T1_1 1 Tf
(form)Tj
/T1_0 1 Tf
(. We will use the more general term )Tj
/T1_1 1 Tf
0 -1.2 TD
(form)Tj
/T1_0 1 Tf
( instead of )Tj
/T1_1 1 Tf
(program)Tj
/T1_0 1 Tf
(, so that we can deal with program fragments too.)Tj
0 -2.562 TD
(Scheme evaluates the form )Tj
0 0.502 0 rg
/T1_3 1 Tf
(#\\c)Tj
0 0 0 rg
/T1_0 1 Tf
( to the value )Tj
0 0.502 0 rg
/T1_3 1 Tf
(#\\c)Tj
0 0 0 rg
/T1_0 1 Tf
(, because )Tj
0 0.502 0 rg
/T1_3 1 Tf
(#\\c)Tj
0 0 0 rg
/T1_0 1 Tf
( is self-evaluating. Not all )Tj
0 -1.205 TD
(s-expressions are self-evaluating. For instance the symbol s-expression \
)Tj
0 0 0.502 rg
/T1_3 1 Tf
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
( evaluates to )Tj
0 -1.205 TD
(the value held by the )Tj
/T1_1 1 Tf
(variable)Tj
/T1_0 1 Tf
( )Tj
0 0 0.502 rg
/T1_3 1 Tf
(xyz)Tj
0 0 0 rg
/T1_0 1 Tf
(. The list s-expression )Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
(\()Tj
0 0 0.502 rg
(string->number)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("16")Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.2 TD
(evaluates to the number 16.)Tj
0 -2.562 TD
(Not all s-expressions are valid programs. If you typed the dotted-pair s\
-expression )Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
0 -1.205 TD
(2)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
( at the Scheme listener, you will get an error.)Tj
0 -2.557 TD
(Scheme evaluates a list form by examining the first element, or )Tj
/T1_1 1 Tf
(head)Tj
/T1_0 1 Tf
(, of the form. If the )Tj
0 -1.2 TD
(head evaluates to a procedure, the rest of the form is evaluated to get \
the procedure's )Tj
T*
(arguments, and the procedure is )Tj
/T1_1 1 Tf
(applied)Tj
/T1_0 1 Tf
( to the arguments. )Tj
0 -2.557 TD
(If the head of the form is a )Tj
/T1_1 1 Tf
(special form)Tj
/T1_0 1 Tf
(, the evaluation proceeds in a manner idiosyncratic )Tj
0 -1.205 TD
(to that form. Some special forms we have already seen are )Tj
0.6 0 0 rg
/T1_4 1 Tf
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0.6 0 0 rg
/T1_4 1 Tf
(define)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0.6 0 0 rg
/T1_4 1 Tf
(set!)Tj
0 0 0 rg
/T1_0 1 Tf
(. )Tj
0.6 0 0 rg
/T1_4 1 Tf
0 -1.205 TD
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
( causes its subforms to be evaluated in order, the result of the entire \
form being the )Tj
0 -1.205 TD
(result of the last subform. )Tj
0.6 0 0 rg
/T1_4 1 Tf
(define)Tj
0 0 0 rg
/T1_0 1 Tf
( introduces and initializes a variable. )Tj
0.6 0 0 rg
/T1_4 1 Tf
(set!)Tj
0 0 0 rg
/T1_0 1 Tf
( changes the )Tj
0 -1.2 TD
(binding of a variable. )Tj
ET
1.628 w
48.96 154.108 m
193.337 154.108 l
S
0 0 1 rg
BT
/T1_2 1 Tf
19.3846 0 0 19.3846 48.96 158.993 Tm
(3.1 Procedures)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 119.6247 Tm
(We have seen quite a few primitive Scheme procedures, eg, )Tj
0 0 0.502 rg
/T1_3 1 Tf
(cons)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_3 1 Tf
(string->list)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 -1.205 TD
(the like. Users can create their own procedures using the special form )Tj
0.6 0 0 rg
/T1_4 1 Tf
(lambda)Tj
0 0 0 rg
/T1_0 1 Tf
(. For )Tj
0 -1.205 TD
(example, the following defines a procedure that adds )Tj
0 0.502 0 rg
/T1_3 1 Tf
(2)Tj
0 0 0 rg
/T1_0 1 Tf
( to its argument:)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_4 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-5.html \(1 o\
f 4\)11/3/2006 8:46:44 PM)Tj
ET
EMC
endstream
endobj
615 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
14 0 0 14 48.96 735.2225 Tm
(The first subform, )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
(, is the list of parameters. The remaining subform\(s\) constitute the )Tj
0 -1.2 TD
(procedure's body. This procedure can be called on an argument, just like\
a primitive )Tj
T*
(procedure:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(7)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(If we wanted to call this same procedure many times, we could create a r\
eplica using )Tj
0.6 0 0 rg
/T1_2 1 Tf
0 -1.205 TD
(lambda)Tj
0 0 0 rg
/T1_0 1 Tf
( each time, but we can do better. We can use a variable to hold the proc\
edure )Tj
0 -1.2 TD
(value:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(add2)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(We can then use the variable )Tj
0 0 0.502 rg
/T1_1 1 Tf
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
( each time we need a procedure for adding )Tj
0 0.502 0 rg
/T1_1 1 Tf
(2)Tj
0 0 0 rg
/T1_0 1 Tf
( to its )Tj
T*
(argument:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(add2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(6)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(add2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(11)Tj
ET
0 0 1 RG
1.357 w 10 M 0 j 0 J []0 d
48.96 379.687 m
265.341 379.687 l
S
0 0 1 rg
BT
/T1_3 1 Tf
16.1538 0 0 16.1538 48.96 383.7579 Tm
(3.1.1 Procedure parameters)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 345.4357 Tm
(The parameters of a )Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0 0 0 rg
/T1_0 1 Tf
(-procedure are specified by its first subform \(the form )Tj
0 -1.205 TD
(immediately following the head, the symbol )Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0 0 0 rg
/T1_0 1 Tf
(\). )Tj
0 0 0.502 rg
/T1_1 1 Tf
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
( is a single-argument -- or )Tj
/T1_4 1 Tf
0 -1.205 TD
(unary)Tj
/T1_0 1 Tf
( -- procedure, and so its parameter list is the singleton list )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
(. The symbol )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( acts as )Tj
0 -1.205 TD
(a variable holding the procedure's argument. Each occurrence of )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( in the procedure's body )Tj
0 -1.205 TD
(refers to the procedure's argument. The variable )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( is said to be )Tj
/T1_4 1 Tf
(local)Tj
/T1_0 1 Tf
( to the procedure's )Tj
0 -1.2 TD
(body.)Tj
0 -2.557 TD
(We can use 2-element lists for 2-argument procedures, and in general, )Tj
/T1_4 1 Tf
(n)Tj
/T1_0 1 Tf
(-element lists for )Tj
/T1_4 1 Tf
(n)Tj
/T1_0 1 Tf
(-)Tj
0 -1.2 TD
(argument procedures. The following is a 2-argument procedure that calcul\
ates the area of a )Tj
T*
(rectangle. Its two arguments are the length and breadth of the rectangle\
.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(area)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(length)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(breadth)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(*)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(length)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(breadth)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Notice that )Tj
0 0 0.502 rg
/T1_1 1 Tf
(area)Tj
0 0 0 rg
/T1_0 1 Tf
( multiplies its arguments, and so does the primitive procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(*)Tj
0 0 0 rg
/T1_0 1 Tf
(. We )Tj
T*
(could have simply said:)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-5.html \(2 o\
f 4\)11/3/2006 8:46:44 PM)Tj
ET
EMC
endstream
endobj
616 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
14 0 0 14 83.96 744.9082 Tm
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(area)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(*)Tj
0.647 0.165 0.165 rg
(\))Tj
ET
0 0 1 RG
1.357 w 10 M 0 j 0 J []0 d
48.96 702.975 m
327.258 702.975 l
S
0 0 1 rg
BT
/T1_3 1 Tf
16.1538 0 0 16.1538 48.96 707.0457 Tm
(3.1.2 Variable number of arguments)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 668.7909 Tm
(Some procedures can be called at different times with different numbers \
of arguments. To )Tj
0 -1.205 TD
(do this, the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0 0 0 rg
/T1_0 1 Tf
( parameter list is replaced by a single symbol. This symbol acts as a )Tj
0 -1.2 TD
(variable that is bound to the list of the arguments that the procedure i\
s called on.)Tj
0 -2.562 TD
(In general, the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0 0 0 rg
/T1_0 1 Tf
( parameter list can be a list of the form )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( ...\))Tj
0 0 0 rg
/T1_0 1 Tf
(, a symbol, or a )Tj
0 -1.205 TD
(dotted pair of the form )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( ... . )Tj
0 0 0.502 rg
(z)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
(. In the dotted-pair case, all the variables before the )Tj
0 -1.2 TD
(dot are bound to the corresponding arguments in the procedure call, with\
the single )Tj
T*
(variable after the dot picking up all the remaining arguments as one lis\
t.)Tj
ET
1.628 w
48.96 503.143 m
86.682 503.143 l
S
0 0 0.502 RG
0.977 w
86.682 505.097 m
144.836 505.097 l
S
0 0 1 rg
BT
/T1_3 1 Tf
19.3846 0 0 19.3846 48.96 508.0281 Tm
(3.2 )Tj
0 0 0.502 rg
/T1_2 1 Tf
(apply)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 468.4173 Tm
(The Scheme procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(apply)Tj
0 0 0 rg
/T1_0 1 Tf
( lets us call a procedure on a )Tj
/T1_4 1 Tf
(list)Tj
/T1_0 1 Tf
( of its arguments.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(apply)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(6)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(In general, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(apply)Tj
0 0 0 rg
/T1_0 1 Tf
( takes a procedure, followed by a variable number of other arguments, )Tj
T*
(the last of which must be a list. It constructs the argument list by pre\
fixing the last )Tj
T*
(argument with all the other \(intervening\) arguments. It then returns t\
he result of calling the )Tj
T*
(procedure on this argument list. Eg,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(apply)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(12)Tj
ET
0 0 1 RG
1.628 w
48.96 197.704 m
196.554 197.704 l
S
0 0 1 rg
BT
/T1_3 1 Tf
19.3846 0 0 19.3846 48.96 202.5892 Tm
(3.3 Sequencing)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 163.2209 Tm
(We used the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
( special form to bunch together a group of subforms that need to be )Tj
0 -1.205 TD
(evaluated in sequence. Many Scheme forms have )Tj
/T1_4 1 Tf
(implicit)Tj
/T1_0 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
(s. For example, let's )Tj
0 -1.2 TD
(define a 3-argument procedure that displays its three arguments, with sp\
aces between )Tj
T*
(them. A possible definition is:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(display3)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(arg1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(arg2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(arg3)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-5.html \(3 o\
f 4\)11/3/2006 8:46:44 PM)Tj
ET
EMC
endstream
endobj
617 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
14 0 0 14 83.96 744.9082 Tm
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(arg1)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(" ")Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(arg2)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(" ")Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(arg3)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(In Scheme, )Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0 0 0 rg
/T1_0 1 Tf
(-bodies are implicit )Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
(s. Thus, the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
( in )Tj
0 0 0.502 rg
/T1_1 1 Tf
(display3)Tj
0 0 0 rg
/T1_0 1 Tf
('s body )Tj
0 -1.205 TD
(isn't needed, although it doesn't hurt. )Tj
0 0 0.502 rg
/T1_1 1 Tf
(display3)Tj
0 0 0 rg
/T1_0 1 Tf
(, more simply, is:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(display3)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(arg1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(arg2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(arg3)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(arg1)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(" ")Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(arg2)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(" ")Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(arg3)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
1 0 0 rg
/T1_3 1 Tf
13.361 -2.552 Td
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 417.126 m
334.028 417.126 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 311.46 419.0408 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 417.126 m
389.244 417.126 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 341.028 419.0408 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 417.126 m
419.568 417.126 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 396.244 419.0408 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 417.126 m
512.108 417.126 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 465.446 419.0408 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 417.126 m
557.594 417.126 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 527.27 419.0408 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-5.html \(4 o\
f 4\)11/3/2006 8:46:44 PM)Tj
ET
EMC
endstream
endobj
618 0 obj(Teach Yourself Scheme in Fixnum Days )
endobj
619 0 obj<>
endobj
620 0 obj(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-5.html)
endobj
621 0 obj(C¾uRë$ýç1 E_t)
endobj
622 0 obj<>
endobj
623 0 obj<>
endobj
624 0 obj(¡1 å~¯þ—¾ÙQ†tœ)
endobj
625 0 obj<>
endobj
626 0 obj<>
endobj
627 0 obj<><><>]/P 9 0 R/S/Article/T()/Pg 628 0 R>>
endobj
628 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
629 0 obj<>
endobj
630 0 obj[627 0 R]
endobj
631 0 obj<>/A<>/Border[0 0 0]>>
endobj
632 0 obj[631 0 R 633 0 R 634 0 R 635 0 R 636 0 R 638 0 R 639 0 R 642 0 R 648 0 R]
endobj
633 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
634 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
635 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
636 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
637 0 obj[628 0 R/XYZ 0 719.2 null]
endobj
638 0 obj<>/A<0; únode_toc_node_chap_4)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
639 0 obj<>/A<0; únode_toc_node_chap_4)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
640 0 obj[628 0 R/XYZ 0 592.985 null]
endobj
641 0 obj[628 0 R/XYZ 0 592.985 null]
endobj
642 0 obj<>/A<Enode_chap_8)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
643 0 obj[628 0 R/XYZ 0 193.382 null]
endobj
644 0 obj[628 0 R/XYZ 0 193.382 null]
endobj
645 0 obj[628 0 R/XYZ 0 193.382 null]
endobj
646 0 obj<>
endobj
647 0 obj<0; únode_toc_node_chap_Temp_2)]/Names[]>>
endobj
648 0 obj<>/A<0; únode_toc_node_sec_4.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
649 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
650 0 obj[627 0 R]
endobj
651 0 obj[649 0 R/XYZ 0 462.398 null]
endobj
652 0 obj<>/A<Enode_chap_8)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
653 0 obj[652 0 R 656 0 R]
endobj
654 0 obj[649 0 R/XYZ 0 199.396 null]
endobj
655 0 obj[649 0 R/XYZ 0 199.396 null]
endobj
656 0 obj<>/A<0; únode_toc_node_sec_4.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
657 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
658 0 obj[627 0 R]
endobj
659 0 obj[657 0 R/XYZ 0 543.087 null]
endobj
660 0 obj[657 0 R/XYZ 0 543.087 null]
endobj
661 0 obj<>/A<0; únode_toc_node_sec_4.3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
662 0 obj[661 0 R 666 0 R 667 0 R]
endobj
663 0 obj[657 0 R/XYZ 0 290.248 null]
endobj
664 0 obj[657 0 R/XYZ 0 290.248 null]
endobj
665 0 obj[657 0 R/XYZ 0 290.248 null]
endobj
666 0 obj<>/A<0; únode_toc_node_sec_4.4)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
667 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
668 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
669 0 obj[627 0 R]
endobj
670 0 obj<>/A<>/Border[0 0 0]>>
endobj
671 0 obj[670 0 R 672 0 R 673 0 R 674 0 R 675 0 R]
endobj
672 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
673 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
674 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
675 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
676 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
BT
/T1_1 1 Tf
14 0 0 14 271.014 744.9756 Tm
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 743.06 m
334.028 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 311.46 744.9756 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 743.06 m
389.244 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 341.028 744.9756 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 743.06 m
419.568 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 396.244 744.9756 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 743.06 m
512.108 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 465.446 744.9756 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 743.06 m
557.594 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 527.27 744.9756 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
2.081 w
48.96 691.255 m
163.196 691.255 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 697.4968 Tm
(Chapter 4)Tj
0 0 0 rg
0 -1.948 TD
( )Tj
ET
48.96 615.763 m
198.962 615.763 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 622.0045 Tm
(Conditionals)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 580.8928 Tm
(Like all languages, Scheme provides )Tj
/T1_1 1 Tf
(conditionals)Tj
/T1_0 1 Tf
(. The basic form is the )Tj
0.6 0 0 rg
/T1_3 1 Tf
(if)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(test-expression)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( )Tj
0 0 0.502 rg
(then-branch)Tj
0.647 0.165 0.165 rg
T*
( )Tj
0 0 0.502 rg
(else-branch)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(If )Tj
0 0 0.502 rg
/T1_4 1 Tf
(test-expression)Tj
0 0 0 rg
/T1_0 1 Tf
( evaluates to true \(ie, any value other than )Tj
0 0.502 0 rg
/T1_4 1 Tf
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
(\), the ``then'' branch )Tj
T*
(is evaluated. If not, the ``else'' branch is evaluated. The ``else'' bra\
nch is optional.)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(p)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(80)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -2.4 TD
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( \()Tj
0 0 0.502 rg
(>)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(p)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(70)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 -1.2 TD
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
(')Tj
0 0 0.502 rg
/T1_4 1 Tf
(safe)Tj
0.647 0.165 0.165 rg
T*
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
(')Tj
0 0 0.502 rg
/T1_4 1 Tf
(unsafe)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_3 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(safe)Tj
0.647 0.165 0.165 rg
( )Tj
0 -2.4 TD
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( \()Tj
0 0 0.502 rg
(<)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(p)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(90)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
(')Tj
0 0 0.502 rg
/T1_4 1 Tf
(low-pressure)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
(;no ``else'' branch)Tj
/T1_3 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(low-pressure)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Scheme provides some other conditional forms for convenience. They can a\
ll be defined )Tj
0 -1.205 TD
(as macros \(chap )Tj
ET
0.706 w
142.648 217.041 m
149.648 217.041 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 142.648 219.158 Tm
(8)Tj
0 0 0 rg
(\) that expand into )Tj
0.6 0 0 rg
/T1_3 1 Tf
(if)Tj
0 0 0 rg
/T1_0 1 Tf
(-expressions.)Tj
ET
1.628 w
48.96 171.512 m
86.682 171.512 l
S
0.6 0 0 RG
0.977 w
86.682 173.466 m
133.206 173.466 l
S
0 0 1 RG
1.628 w
133.206 171.512 m
178.449 171.512 l
S
0.6 0 0 RG
0.977 w
178.449 173.466 m
248.234 173.466 l
S
0 0 1 rg
BT
/T1_2 1 Tf
19.3846 0 0 19.3846 48.96 176.3973 Tm
(4.1 )Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0 0 1 rg
/T1_2 1 Tf
( and )Tj
0.6 0 0 rg
/T1_3 1 Tf
(unless)Tj
14 0 0 14 48.96 136.7865 Tm
(when)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0.6 0 0 rg
/T1_3 1 Tf
(unless)Tj
0 0 0 rg
/T1_0 1 Tf
( are convenient conditionals to use when only one branch \(the ``then'' \
)Tj
0 -1.2 TD
(or the ``else'' branch\) of the basic conditional is needed.)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( \()Tj
0 0 0.502 rg
(<)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(pressure)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(60)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(open-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(attach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-6.html \(1 o\
f 4\)11/3/2006 8:46:55 PM)Tj
ET
EMC
endstream
endobj
677 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
14 0 0 14 83.96 744.9082 Tm
( \()Tj
0 0 0.502 rg
(depress)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(detach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(close-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Assuming )Tj
0 0 0.502 rg
/T1_1 1 Tf
(pressure)Tj
0 0 0 rg
/T1_0 1 Tf
( of )Tj
0 0 0.502 rg
/T1_1 1 Tf
(tube)Tj
0 0 0 rg
/T1_0 1 Tf
( is less than )Tj
0 0.502 0 rg
/T1_1 1 Tf
(60)Tj
0 0 0 rg
/T1_0 1 Tf
(, this conditional will attach )Tj
0 0 0.502 rg
/T1_1 1 Tf
(floor-pump)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.205 TD
(to )Tj
0 0 0.502 rg
/T1_1 1 Tf
(tube)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(depress)Tj
0 0 0 rg
/T1_0 1 Tf
( it )Tj
0 0.502 0 rg
/T1_1 1 Tf
(5)Tj
0 0 0 rg
/T1_0 1 Tf
( times. \()Tj
0 0 0.502 rg
/T1_1 1 Tf
(attach)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(depress)Tj
0 0 0 rg
/T1_0 1 Tf
( are some suitable procedures.\))Tj
0 -2.562 TD
(The same program using )Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0 0 0 rg
/T1_0 1 Tf
( would be:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(<)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(pressure)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(60)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0 0 0.502 rg
(open-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(attach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(depress)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(detach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(close-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Note that )Tj
0.6 0 0 rg
/T1_2 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
('s branch is an implicit )Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
(, whereas )Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0 0 0 rg
/T1_0 1 Tf
( requires an explicit )Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
( if )Tj
T*
(either of its branches has more than one form.)Tj
0 -2.562 TD
(The same behavior can be written using )Tj
0.6 0 0 rg
/T1_2 1 Tf
(unless)Tj
0 0 0 rg
/T1_0 1 Tf
( as follows:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(unless)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(>=)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(pressure)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(60)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(open-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(attach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(depress)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(detach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(close-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Not all Schemes provide )Tj
0.6 0 0 rg
/T1_2 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0.6 0 0 rg
/T1_2 1 Tf
(unless)Tj
0 0 0 rg
/T1_0 1 Tf
(. If your Scheme does not have them, you can )Tj
T*
(define them as macros \(see chap )Tj
ET
0 0 1 RG
0.706 w 10 M 0 j 0 J []0 d
234.012 223.054 m
241.012 223.054 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 234.012 225.1712 Tm
(8)Tj
0 0 0 rg
(\).)Tj
ET
1.628 w
48.96 177.526 m
86.682 177.526 l
S
0.6 0 0 RG
0.977 w
86.682 179.48 m
133.206 179.48 l
S
0 0 1 rg
BT
/T1_3 1 Tf
19.3846 0 0 19.3846 48.96 182.4105 Tm
(4.2 )Tj
0.6 0 0 rg
/T1_2 1 Tf
(cond)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 142.7997 Tm
(The )Tj
0.6 0 0 rg
/T1_2 1 Tf
(cond)Tj
0 0 0 rg
/T1_0 1 Tf
( form is convenient for expressing nested )Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0 0 0 rg
/T1_0 1 Tf
(-expressions, where each ``else'' )Tj
0 -1.205 TD
(branch but the last introduces a new )Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0 0 0 rg
/T1_0 1 Tf
(. Thus, the form )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(c)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\c)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(-1)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(char=?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(c)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\c)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
T*
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-6.html \(2 o\
f 4\)11/3/2006 8:46:55 PM)Tj
ET
EMC
endstream
endobj
678 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
14 0 0 14 48.96 741.6649 Tm
(can be rewritten using )Tj
0.6 0 0 rg
/T1_1 1 Tf
(cond)Tj
0 0 0 rg
/T1_0 1 Tf
( as:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(cond)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \(\()Tj
0 0 0.502 rg
(char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(c)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\c)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(-1)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \(\()Tj
0 0 0.502 rg
(char=?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(c)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\c)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(else)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The )Tj
0.6 0 0 rg
/T1_1 1 Tf
(cond)Tj
0 0 0 rg
/T1_0 1 Tf
( is thus a )Tj
/T1_3 1 Tf
(multi-branch)Tj
/T1_0 1 Tf
( conditional. Each clause has a test and an associated )Tj
0 -1.205 TD
(action. The first test that succeeds triggers its associated action. The\
final )Tj
0.6 0 0 rg
/T1_1 1 Tf
(else)Tj
0 0 0 rg
/T1_0 1 Tf
( clause is )Tj
0 -1.2 TD
(chosen if no other test succeeded.)Tj
0 -2.562 TD
(The )Tj
0.6 0 0 rg
/T1_1 1 Tf
(cond)Tj
0 0 0 rg
/T1_0 1 Tf
( actions are implicit )Tj
0.6 0 0 rg
/T1_1 1 Tf
(begin)Tj
0 0 0 rg
/T1_0 1 Tf
(s.)Tj
ET
0 0 1 RG
1.628 w 10 M 0 j 0 J []0 d
48.96 521.217 m
86.682 521.217 l
S
0.6 0 0 RG
0.977 w
86.682 523.171 m
133.206 523.171 l
S
0 0 1 rg
BT
/T1_4 1 Tf
19.3846 0 0 19.3846 48.96 526.102 Tm
(4.3 )Tj
0.6 0 0 rg
/T1_1 1 Tf
(case)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 486.4912 Tm
(A special case of the )Tj
0.6 0 0 rg
/T1_1 1 Tf
(cond)Tj
0 0 0 rg
/T1_0 1 Tf
( can be compressed into a )Tj
0.6 0 0 rg
/T1_1 1 Tf
(case)Tj
0 0 0 rg
/T1_0 1 Tf
( expression. This is when )Tj
0 -1.2 TD
(every test is a membership test.)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(case)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(c)Tj
0.647 0.165 0.165 rg
T*
( \(\()Tj
0 0.502 0 rg
(#\\a)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \(\()Tj
0 0.502 0 rg
(#\\b)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \(\()Tj
0 0.502 0 rg
(#\\c)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(else)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(3)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The clause whose head contains the value of )Tj
0 0 0.502 rg
/T1_2 1 Tf
(c)Tj
0 0 0 rg
/T1_0 1 Tf
( is chosen.)Tj
ET
0 0 1 RG
1.628 w
48.96 268.378 m
86.682 268.378 l
S
0.6 0 0 RG
0.977 w
86.682 270.332 m
121.575 270.332 l
S
0 0 1 RG
1.628 w
121.575 268.378 m
166.818 268.378 l
S
0.6 0 0 RG
0.977 w
166.818 270.332 m
190.08 270.332 l
S
0 0 1 rg
BT
/T1_4 1 Tf
19.3846 0 0 19.3846 48.96 273.2632 Tm
(4.4 )Tj
0.6 0 0 rg
/T1_1 1 Tf
(and)Tj
0 0 1 rg
/T1_4 1 Tf
( and )Tj
0.6 0 0 rg
/T1_1 1 Tf
(or)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 233.7197 Tm
(Scheme provides special forms for boolean conjunction \(``and''\) and di\
sjunction \(``or''\). )Tj
0 -1.205 TD
(\(We have already seen \(sec )Tj
ET
0 0 1 RG
0.706 w
205.606 214.736 m
233.606 214.736 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 205.606 216.8523 Tm
(2.1.1)Tj
0 0 0 rg
(\) Scheme's boolean negation )Tj
0 0 0.502 rg
/T1_2 1 Tf
(not)Tj
0 0 0 rg
/T1_0 1 Tf
(, which is a procedure.\) )Tj
-11.189 -2.705 Td
(The special form )Tj
0.6 0 0 rg
/T1_1 1 Tf
(and)Tj
0 0 0 rg
/T1_0 1 Tf
( returns a true value if all its subforms are true. The actual value )Tj
0 -1.205 TD
(returned is the value of the final subform. If any of the subforms are f\
alse, )Tj
0.6 0 0 rg
/T1_1 1 Tf
(and)Tj
0 0 0 rg
/T1_0 1 Tf
( returns )Tj
0 0.502 0 rg
/T1_2 1 Tf
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(and)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(and)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The special form )Tj
0.6 0 0 rg
/T1_1 1 Tf
(or)Tj
0 0 0 rg
/T1_0 1 Tf
( returns the value of its first true subform. If all the subforms are fa\
lse, )Tj
0.6 0 0 rg
/T1_1 1 Tf
0 -1.205 TD
(or)Tj
0 0 0 rg
/T1_0 1 Tf
( returns )Tj
0 0.502 0 rg
/T1_2 1 Tf
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-6.html \(3 o\
f 4\)11/3/2006 8:46:55 PM)Tj
ET
EMC
endstream
endobj
679 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
14 0 0 14 83.96 741.9153 Tm
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(or)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(or)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Both )Tj
0.6 0 0 rg
/T1_2 1 Tf
(and)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0.6 0 0 rg
/T1_2 1 Tf
(or)Tj
0 0 0 rg
/T1_0 1 Tf
( evaluate their subforms left-to-right. As soon as the result can be )Tj
0 -1.205 TD
(determined, )Tj
0.6 0 0 rg
/T1_2 1 Tf
(and)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0.6 0 0 rg
/T1_2 1 Tf
(or)Tj
0 0 0 rg
/T1_0 1 Tf
( will ignore the remaining subforms.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(and)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(expression-guaranteed-to-cause-error)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(or)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(expression-guaranteed-to-cause-error)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
1 0 0 rg
/T1_3 1 Tf
13.361 -2.552 Td
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 531.733 m
334.028 531.733 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 311.46 533.6479 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 531.733 m
389.244 531.733 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 341.028 533.6479 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 531.733 m
419.568 531.733 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 396.244 533.6479 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 531.733 m
512.108 531.733 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 465.446 533.6479 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 531.733 m
557.594 531.733 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 527.27 533.6479 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-6.html \(4 o\
f 4\)11/3/2006 8:46:55 PM)Tj
ET
EMC
endstream
endobj
680 0 obj(Teach Yourself Scheme in Fixnum Days )
endobj
681 0 obj<>
endobj
682 0 obj(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-6.html)
endobj
683 0 obj(ÃÂ"o;.i;åxrnñÝD)
endobj
684 0 obj<>
endobj
685 0 obj<>
endobj
686 0 obj(YZÉ2‘\\¼êeÿ¦\n)
endobj
687 0 obj<>
endobj
688 0 obj<>
endobj
689 0 obj<><><><>]/P 9 0 R/S/Article/T()/Pg 690 0 R>>
endobj
690 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
691 0 obj[689 0 R]
endobj
692 0 obj<>/A<>/Border[0 0 0]>>
endobj
693 0 obj[692 0 R 694 0 R 695 0 R 696 0 R 697 0 R 699 0 R 700 0 R]
endobj
694 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
695 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
696 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
697 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
698 0 obj[690 0 R/XYZ 0 719.2 null]
endobj
699 0 obj<>/A<0; únode_toc_node_chap_5)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
700 0 obj<>/A<0; únode_toc_node_chap_5)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
701 0 obj[690 0 R/XYZ 0 592.985 null]
endobj
702 0 obj[690 0 R/XYZ 0 592.985 null]
endobj
703 0 obj[690 0 R/XYZ 0 592.985 null]
endobj
704 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
705 0 obj<>
endobj
706 0 obj[689 0 R]
endobj
707 0 obj[704 0 R/XYZ 0 43.1239 null]
endobj
708 0 obj[704 0 R/XYZ 0 43.1239 null]
endobj
709 0 obj[704 0 R/XYZ 0 43.1239 null]
endobj
710 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
711 0 obj[689 0 R]
endobj
712 0 obj<>/A<0; únode_toc_node_sec_5.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
713 0 obj[712 0 R]
endobj
714 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
715 0 obj[689 0 R]
endobj
716 0 obj[714 0 R/XYZ 0 563.333 null]
endobj
717 0 obj[714 0 R/XYZ 0 563.333 null]
endobj
718 0 obj<>/A<0; únode_toc_node_sec_5.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
719 0 obj[718 0 R 721 0 R]
endobj
720 0 obj[714 0 R/XYZ 0 469.456 null]
endobj
721 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
722 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
723 0 obj[689 0 R]
endobj
724 0 obj[722 0 R/XYZ 0 381.937 null]
endobj
725 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
726 0 obj[725 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R]
endobj
727 0 obj<>/A<Enode_sec_8.3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
728 0 obj<>/A<>/Border[0 0 0]>>
endobj
729 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
730 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
731 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
732 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
733 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
BT
/T1_1 1 Tf
14 0 0 14 271.014 744.9756 Tm
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 743.06 m
334.028 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 311.46 744.9756 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 743.06 m
389.244 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 341.028 744.9756 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 743.06 m
419.568 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 396.244 744.9756 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 743.06 m
512.108 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 465.446 744.9756 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 743.06 m
557.594 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 527.27 744.9756 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
2.081 w
48.96 691.255 m
163.196 691.255 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 697.4968 Tm
(Chapter 5)Tj
0 0 0 rg
0 -1.948 TD
( )Tj
ET
48.96 615.763 m
247.238 615.763 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 622.0045 Tm
(Lexical variables)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 580.9602 Tm
(Scheme's variables have lexical scope, ie, they are visible only to form\
s within a certain )Tj
0 -1.2 TD
(contiguous stretch of program text. The )Tj
/T1_1 1 Tf
(global)Tj
/T1_0 1 Tf
( variables we have seen thus far are no )Tj
T*
(exception: Their scope is all program text, which is certainly contiguou\
s.)Tj
0 -2.562 TD
(We have also seen some examples of )Tj
/T1_1 1 Tf
(local)Tj
/T1_0 1 Tf
( variables. These were the )Tj
0.6 0 0 rg
/T1_3 1 Tf
(lambda)Tj
0 0 0 rg
/T1_0 1 Tf
( parameters, )Tj
0 -1.2 TD
(which get )Tj
/T1_1 1 Tf
(bound)Tj
/T1_0 1 Tf
( each time the procedure is called, and whose scope is that procedure's \
)Tj
T*
(body. Eg,)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(add2)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_3 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
0 0 0.502 rg
0 -2.4 TD
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_3 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(add2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_3 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(add2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_3 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0.502 0 rg
(11)Tj
0 0 0.502 rg
0 -2.4 TD
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_3 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0.502 0 rg
(9)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Here, there is a global )Tj
0 0 0.502 rg
/T1_4 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(, and there is also a local )Tj
0 0 0.502 rg
/T1_4 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(, the latter introduced by procedure )Tj
0 0 0.502 rg
/T1_4 1 Tf
0 -1.205 TD
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
(. The global )Tj
0 0 0.502 rg
/T1_4 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( is always )Tj
0 0.502 0 rg
/T1_4 1 Tf
(9)Tj
0 0 0 rg
/T1_0 1 Tf
(. The local )Tj
0 0 0.502 rg
/T1_4 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( gets bound to )Tj
0 0.502 0 rg
/T1_4 1 Tf
(3)Tj
0 0 0 rg
/T1_0 1 Tf
( in the first call to )Tj
0 0 0.502 rg
/T1_4 1 Tf
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
T*
(to the value of the global )Tj
0 0 0.502 rg
/T1_4 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(, ie, )Tj
0 0.502 0 rg
/T1_4 1 Tf
(9)Tj
0 0 0 rg
/T1_0 1 Tf
(, in the second call to )Tj
0 0 0.502 rg
/T1_4 1 Tf
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
(. When the procedure calls )Tj
0 -1.205 TD
(return, the global )Tj
0 0 0.502 rg
/T1_4 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( continues to be )Tj
0 0.502 0 rg
/T1_4 1 Tf
(9)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.562 TD
(The form )Tj
0.6 0 0 rg
/T1_3 1 Tf
(set!)Tj
0 0 0 rg
/T1_0 1 Tf
( modifies the lexical binding of a variable.)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(20)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(modifies the global binding of )Tj
0 0 0.502 rg
/T1_4 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( from )Tj
0 0.502 0 rg
/T1_4 1 Tf
(9)Tj
0 0 0 rg
/T1_0 1 Tf
( to )Tj
0 0.502 0 rg
/T1_4 1 Tf
(20)Tj
0 0 0 rg
/T1_0 1 Tf
(, because that is the binding of )Tj
0 0 0.502 rg
/T1_4 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( that is )Tj
0 -1.205 TD
(visible to )Tj
0.6 0 0 rg
/T1_3 1 Tf
(set!)Tj
0 0 0 rg
/T1_0 1 Tf
(. If the )Tj
0.6 0 0 rg
/T1_3 1 Tf
(set!)Tj
0 0 0 rg
/T1_0 1 Tf
( was inside )Tj
0 0 0.502 rg
/T1_4 1 Tf
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
('s body, it would have modified the local )Tj
0 0 0.502 rg
/T1_4 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(add2)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_3 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-7.html \(1 o\
f 5\)11/3/2006 8:49:34 PM)Tj
ET
EMC
endstream
endobj
734 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
14 0 0 14 83.96 744.9082 Tm
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -1.2 TD
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The )Tj
0.6 0 0 rg
/T1_2 1 Tf
(set!)Tj
0 0 0 rg
/T1_0 1 Tf
( here adds )Tj
0 0.502 0 rg
/T1_1 1 Tf
(2)Tj
0 0 0 rg
/T1_0 1 Tf
( to the local variable )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(, and the procedure returns this new value of )Tj
0 -1.205 TD
(the local )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(. \(In terms of effect, this procedure is indistinguishable from the pre\
vious )Tj
0 0 0.502 rg
/T1_1 1 Tf
0 -1.205 TD
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
(.\) We can call )Tj
0 0 0.502 rg
/T1_1 1 Tf
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
( on the global )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(, as before:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(add2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(22)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(\(Remember global )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( is now )Tj
0 0.502 0 rg
/T1_1 1 Tf
(20)Tj
0 0 0 rg
/T1_0 1 Tf
(, not )Tj
0 0.502 0 rg
/T1_1 1 Tf
(9)Tj
0 0 0 rg
/T1_0 1 Tf
(!\))Tj
0 -2.562 TD
(The )Tj
0.6 0 0 rg
/T1_2 1 Tf
(set!)Tj
0 0 0 rg
/T1_0 1 Tf
( inside )Tj
0 0 0.502 rg
/T1_1 1 Tf
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
( affects only the local variable used by )Tj
0 0 0.502 rg
/T1_1 1 Tf
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
(. Although the local )Tj
0 -1.205 TD
(variable )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( got its binding from the global )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(, the latter is unaffected by the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(set!)Tj
0 0 0 rg
/T1_0 1 Tf
( to the )Tj
0 -1.205 TD
(local )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 0 0.502 rg
/T1_1 1 Tf
2.5 -2.562 Td
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(20)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Note that we had all this discussion because we used the same identifier\
for a local )Tj
0 -1.205 TD
(variable and a global variable. In any text, an identifier named )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( refers to the lexically )Tj
0 -1.205 TD
(closest variable named )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(. This will )Tj
/T1_3 1 Tf
(shadow)Tj
/T1_0 1 Tf
( any outer or global )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
('s. Eg, in )Tj
0 0 0.502 rg
/T1_1 1 Tf
(add2)Tj
0 0 0 rg
/T1_0 1 Tf
(, the )Tj
0 -1.205 TD
(parameter )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( shadows the global )Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.557 TD
(A procedure's body can access and modify variables in its surrounding sc\
ope provided the )Tj
0 -1.2 TD
(procedure's parameters don't shadow them. This can give some interesting\
programs. Eg,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(counter)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -2.4 TD
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(bump-counter)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(counter)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(counter)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( )Tj
0 0 0.502 rg
(counter)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(bump-counter)Tj
0 0 0 rg
/T1_0 1 Tf
( is a zero-argument procedure \(also called a )Tj
/T1_3 1 Tf
(thunk)Tj
/T1_0 1 Tf
(\). It )Tj
T*
(introduces no local variables, and thus cannot shadow anything. Each tim\
e it is called, it )Tj
0 -1.205 TD
(modifies the )Tj
/T1_3 1 Tf
(global)Tj
/T1_0 1 Tf
( variable )Tj
0 0 0.502 rg
/T1_1 1 Tf
(counter)Tj
0 0 0 rg
/T1_0 1 Tf
( -- it increments it by 1 -- and returns its current )Tj
0 -1.205 TD
(value. Here are some successive calls to )Tj
0 0 0.502 rg
/T1_1 1 Tf
(bump-counter)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(bump-counter)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(bump-counter)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
T*
(\()Tj
0 0 0.502 rg
(bump-counter)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(3)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-7.html \(2 o\
f 5\)11/3/2006 8:49:34 PM)Tj
ET
EMC
endstream
endobj
735 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0 0 1 RG
1.628 w 10 M 0 j 0 J []0 d
48.96 735.13 m
86.682 735.13 l
S
0.6 0 0 RG
0.977 w
86.682 737.084 m
121.575 737.084 l
S
0 0 1 RG
1.628 w
121.575 735.13 m
166.818 735.13 l
S
0.6 0 0 RG
0.977 w
166.818 737.084 m
213.342 737.084 l
S
0 0 1 rg
BT
/T1_1 1 Tf
19.3846 0 0 19.3846 48.96 740.0149 Tm
(5.1 )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 1 rg
/T1_1 1 Tf
( and )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let*)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 700.4715 Tm
(Local variables can be introduced without explicitly creating a procedur\
e. The special )Tj
0 -1.205 TD
(form )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( introduces a list of local variables for use within its body:)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(z)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(z)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(As with )Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0 0 0 rg
/T1_0 1 Tf
(, within the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
(-body, the local )Tj
0 0 0.502 rg
/T1_3 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( \(bound to )Tj
0 0.502 0 rg
/T1_3 1 Tf
(1)Tj
0 0 0 rg
/T1_0 1 Tf
(\) shadows the global )Tj
0 0 0.502 rg
/T1_3 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.205 TD
(\(which is bound to )Tj
0 0.502 0 rg
/T1_3 1 Tf
(20)Tj
0 0 0 rg
/T1_0 1 Tf
(\).)Tj
0 -2.562 TD
(The local variable initializations -- )Tj
0 0 0.502 rg
/T1_3 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( to )Tj
0 0.502 0 rg
/T1_3 1 Tf
(1)Tj
0 0 0 rg
/T1_0 1 Tf
(; )Tj
0 0 0.502 rg
/T1_3 1 Tf
(y)Tj
0 0 0 rg
/T1_0 1 Tf
( to )Tj
0 0.502 0 rg
/T1_3 1 Tf
(2)Tj
0 0 0 rg
/T1_0 1 Tf
(; )Tj
0 0 0.502 rg
/T1_3 1 Tf
(z)Tj
0 0 0 rg
/T1_0 1 Tf
( to )Tj
0 0.502 0 rg
/T1_3 1 Tf
(3)Tj
0 0 0 rg
/T1_0 1 Tf
( -- are not considered part of the )Tj
0.6 0 0 rg
/T1_2 1 Tf
0 -1.205 TD
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( body. Therefore, a reference to )Tj
0 0 0.502 rg
/T1_3 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( in the initialization will refer to the global, not the )Tj
0 -1.205 TD
(local )Tj
0 0 0.502 rg
/T1_3 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(21)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(This is because )Tj
0 0 0.502 rg
/T1_3 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( is bound to )Tj
0 0.502 0 rg
/T1_3 1 Tf
(1)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_3 1 Tf
(y)Tj
0 0 0 rg
/T1_0 1 Tf
( is bound to the )Tj
/T1_4 1 Tf
(global)Tj
/T1_0 1 Tf
( )Tj
0 0 0.502 rg
/T1_3 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
(, which is )Tj
0 0.502 0 rg
/T1_3 1 Tf
(20)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.562 TD
(Sometimes, it is convenient to have )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
('s list of lexical variables be introduced in )Tj
0 -1.2 TD
(sequence, so that the initialization of a later variable occurs in the )Tj
/T1_4 1 Tf
(lexical scope)Tj
/T1_0 1 Tf
( of earlier )Tj
0 -1.205 TD
(variables. The form )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let*)Tj
0 0 0 rg
/T1_0 1 Tf
( does this:)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let*)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The )Tj
0 0 0.502 rg
/T1_3 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( in )Tj
0 0 0.502 rg
/T1_3 1 Tf
(y)Tj
0 0 0 rg
/T1_0 1 Tf
('s initialization refers to the )Tj
0 0 0.502 rg
/T1_3 1 Tf
(x)Tj
0 0 0 rg
/T1_0 1 Tf
( just above. The example is entirely equivalent to )Tj
T*
(-- and is in fact intended to be a convenient abbreviation for -- the fo\
llowing program with )Tj
0 -1.205 TD
(nested )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
(s:)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \(\()Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-7.html \(3 o\
f 5\)11/3/2006 8:49:34 PM)Tj
ET
EMC
endstream
endobj
736 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0 0.502 0.502 rg
BT
/T1_1 1 Tf
14 0 0 14 83.96 744.9082 Tm
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(The values bound to lexical variables can be procedures:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \(\()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_1 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(3)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Inside this )Tj
0.6 0 0 rg
/T1_1 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( body, the lexical variable )Tj
0 0 0.502 rg
/T1_2 1 Tf
(cons)Tj
0 0 0 rg
/T1_0 1 Tf
( adds its arguments. Outside, )Tj
0 0 0.502 rg
/T1_2 1 Tf
(cons)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
T*
(continues to create dotted pairs.)Tj
ET
0 0 1 RG
1.628 w 10 M 0 j 0 J []0 d
48.96 541.463 m
86.682 541.463 l
S
0.6 0 0 RG
0.977 w
86.682 543.417 m
191.359 543.417 l
S
0 0 1 rg
BT
/T1_3 1 Tf
19.3846 0 0 19.3846 48.96 546.3475 Tm
(5.2 )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 506.8041 Tm
(A lexical variable is visible throughout its scope, provided it isn't sh\
adowed. Sometimes, it )Tj
T*
(is helpful to )Tj
/T1_4 1 Tf
(temporarily)Tj
/T1_0 1 Tf
( set a lexical variable to a certain value. For this, we use the form )Tj
0.6 0 0 rg
/T1_1 1 Tf
0 -1.468 TD
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
ET
0 0 1 RG
0.504 w
128.06 474.728 m
133.06 474.728 l
S
0 0 1 rg
BT
/T1_0 1 Tf
10 0 0 10 128.06 476.2396 Tm
(2)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
14 0 0 14 83.96 433.5882 Tm
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \(\()Tj
0 0 0.502 rg
(counter)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(99)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(bump-counter)Tj
0.647 0.165 0.165 rg
(\)\) \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(bump-counter)Tj
0.647 0.165 0.165 rg
(\)\) \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(bump-counter)Tj
0.647 0.165 0.165 rg
(\)\) \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(This looks similar to a )Tj
0.6 0 0 rg
/T1_1 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
(, but instead of shadowing the global variable )Tj
0 0 0.502 rg
/T1_2 1 Tf
(counter)Tj
0 0 0 rg
/T1_0 1 Tf
(, it )Tj
0 -1.205 TD
(temporarily sets it to )Tj
0 0.502 0 rg
/T1_2 1 Tf
(99)Tj
0 0 0 rg
/T1_0 1 Tf
( before continuing with the )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( body. Thus the )Tj
0 0 0.502 rg
/T1_2 1 Tf
0 -1.205 TD
(display)Tj
0 0 0 rg
/T1_0 1 Tf
(s in the body produce)Tj
/T1_2 1 Tf
2.5 -2.562 Td
(100 )Tj
0 -1.2 TD
(101 )Tj
T*
(102 )Tj
/T1_0 1 Tf
-2.5 -2.557 Td
(After the )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( expression has evaluated, the global )Tj
0 0 0.502 rg
/T1_2 1 Tf
(counter)Tj
0 0 0 rg
/T1_0 1 Tf
( reverts to the value )Tj
0 -1.205 TD
(it had before the )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 0 0.502 rg
/T1_2 1 Tf
2.5 -2.562 Td
(counter)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_1 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0.502 0 rg
(3)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Note that )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( has an entirely different effect from )Tj
0.6 0 0 rg
/T1_1 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
(. )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( does not )Tj
0 -1.205 TD
(introduce new lexical variables like )Tj
0.6 0 0 rg
/T1_1 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( does. It modifies the bindings of )Tj
/T1_4 1 Tf
(existing)Tj
/T1_0 1 Tf
( lexical )Tj
0 -1.205 TD
(variables, and the modification ceases as soon as the )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( does.)Tj
0 -2.557 TD
(To drive home this point, consider the program)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-7.html \(4 o\
f 5\)11/3/2006 8:49:34 PM)Tj
ET
EMC
endstream
endobj
737 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
14 0 0 14 83.96 735.4491 Tm
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0 0.502 rg
(counter)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(99)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(bump-counter)Tj
0.647 0.165 0.165 rg
(\)\) \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(bump-counter)Tj
0.647 0.165 0.165 rg
(\)\) \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(bump-counter)Tj
0.647 0.165 0.165 rg
(\)\) \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(which substitutes )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( for )Tj
0.6 0 0 rg
/T1_2 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( in the previous example. The output is now)Tj
0 0.502 0 rg
/T1_1 1 Tf
2.5 -2.562 Td
(4)Tj
T*
(5)Tj
T*
(6)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Ie, the global )Tj
0 0 0.502 rg
/T1_1 1 Tf
(counter)Tj
0 0 0 rg
/T1_0 1 Tf
(, which is initially )Tj
0 0.502 0 rg
/T1_1 1 Tf
(3)Tj
0 0 0 rg
/T1_0 1 Tf
(, is updated by each call to )Tj
0 0 0.502 rg
/T1_1 1 Tf
(bump-counter)Tj
0 0 0 rg
/T1_0 1 Tf
(. )Tj
0 -1.205 TD
(The new lexical variable )Tj
0 0 0.502 rg
/T1_1 1 Tf
(counter)Tj
0 0 0 rg
/T1_0 1 Tf
(, with its initialization of )Tj
0 0.502 0 rg
/T1_1 1 Tf
(99)Tj
0 0 0 rg
/T1_0 1 Tf
(, has no impact on the )Tj
0 -1.205 TD
(calls to )Tj
0 0 0.502 rg
/T1_1 1 Tf
(bump-counter)Tj
0 0 0 rg
/T1_0 1 Tf
(, because although the calls to )Tj
0 0 0.502 rg
/T1_1 1 Tf
(bump-counter)Tj
0 0 0 rg
/T1_0 1 Tf
( are within the )Tj
T*
(scope of this local )Tj
0 0 0.502 rg
/T1_1 1 Tf
(counter)Tj
0 0 0 rg
/T1_0 1 Tf
(, the body of )Tj
0 0 0.502 rg
/T1_1 1 Tf
(bump-counter)Tj
0 0 0 rg
/T1_0 1 Tf
( isn't. The latter continues to )Tj
0 -1.205 TD
(refer to the )Tj
/T1_3 1 Tf
(global)Tj
/T1_0 1 Tf
( )Tj
0 0 0.502 rg
/T1_1 1 Tf
(counter)Tj
0 0 0 rg
/T1_0 1 Tf
(, whose final value is )Tj
0 0.502 0 rg
/T1_1 1 Tf
(6)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 0 0.502 rg
/T1_1 1 Tf
2.5 -2.562 Td
(counter)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0.502 rg
/T1_2 1 Tf
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(6)Tj
ET
0.5 0.5 0.5 rg
48.96 407.937 m
48.96 409.937 l
254.592 409.937 l
253.592 408.937 l
49.96 408.937 l
49.96 408.937 l
h
f
0.875 0.875 0.875 rg
254.592 409.937 m
254.592 407.937 l
48.96 407.937 l
49.96 408.937 l
253.592 408.937 l
253.592 408.937 l
h
f
0 0 1 RG
0.504 w 10 M 0 j 0 J []0 d
48.96 371.436 m
53.96 371.436 l
S
0 0 1 rg
BT
/T1_0 1 Tf
10 0 0 10 48.96 372.9476 Tm
(2)Tj
0 0 0 rg
14 0 0 14 53.96 366.1636 Tm
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( is a nonstandard special form. See sec )Tj
ET
0.706 w
352.734 364.047 m
370.234 364.047 l
S
0 0 1 rg
BT
/T1_0 1 Tf
14 0 0 14 352.734 366.1636 Tm
(8.3)Tj
0 0 0 rg
( for a definition of )Tj
0.6 0 0 rg
/T1_2 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-21.698 -1.343 Td
(in Scheme.)Tj
1 0 0 rg
/T1_3 1 Tf
15.861 -2.557 Td
([Go to )Tj
ET
0.638 w
311.46 309.648 m
334.028 309.648 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 311.46 311.5636 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 309.648 m
389.244 309.648 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 341.028 311.5636 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 309.648 m
419.568 309.648 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 396.244 311.5636 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 309.648 m
512.108 309.648 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 465.446 311.5636 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 309.648 m
557.594 309.648 l
S
0 0 1 rg
BT
/T1_3 1 Tf
14 0 0 14 527.27 311.5636 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-7.html \(5 o\
f 5\)11/3/2006 8:49:34 PM)Tj
ET
EMC
endstream
endobj
738 0 obj(Teach Yourself Scheme in Fixnum Days )
endobj
739 0 obj<>
endobj
740 0 obj(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-7.html)
endobj
741 0 obj(9šÖþÓZY|´±†7#œä„)
endobj
742 0 obj<>
endobj
743 0 obj<>
endobj
744 0 obj(ú‡‰\\Zƒì»Ø4¸ô–I)
endobj
745 0 obj<>
endobj
746 0 obj<>
endobj
747 0 obj<><><>]/P 9 0 R/S/Article/T()/Pg 748 0 R>>
endobj
748 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
749 0 obj[747 0 R]
endobj
750 0 obj<>/A<>/Border[0 0 0]>>
endobj
751 0 obj[750 0 R 752 0 R 753 0 R 754 0 R 755 0 R 757 0 R 758 0 R 766 0 R]
endobj
752 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
753 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
754 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
755 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
756 0 obj[748 0 R/XYZ 0 723.154 null]
endobj
757 0 obj<>/A<0; únode_toc_node_chap_6)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
758 0 obj<>/A<0; únode_toc_node_chap_6)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
759 0 obj[748 0 R/XYZ 0 606.044 null]
endobj
760 0 obj[748 0 R/XYZ 0 606.044 null]
endobj
761 0 obj[748 0 R/XYZ 0 221.54 null]
endobj
762 0 obj[748 0 R/XYZ 0 221.54 null]
endobj
763 0 obj[748 0 R/XYZ 0 172.672 null]
endobj
764 0 obj[748 0 R/XYZ 0 172.672 null]
endobj
765 0 obj[748 0 R/XYZ 0 172.672 null]
endobj
766 0 obj<>/A<0; únode_toc_node_sec_6.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
767 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
768 0 obj<>
endobj
769 0 obj[747 0 R]
endobj
770 0 obj[767 0 R/XYZ 0 389.06 null]
endobj
771 0 obj[767 0 R/XYZ 0 389.06 null]
endobj
772 0 obj<>
endobj
773 0 obj<>
endobj
774 0 obj[767 0 R/XYZ 0 389.06 null]
endobj
775 0 obj<>/A<0; únode_toc_node_sec_6.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
776 0 obj[775 0 R]
endobj
777 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
778 0 obj[747 0 R]
endobj
779 0 obj<>/A<Enode_chap_8)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
780 0 obj[779 0 R 790 0 R]
endobj
781 0 obj[777 0 R/XYZ 0 642.985 null]
endobj
782 0 obj[777 0 R/XYZ 0 642.985 null]
endobj
783 0 obj[777 0 R/XYZ 0 642.985 null]
endobj
784 0 obj[777 0 R/XYZ 0 642.985 null]
endobj
785 0 obj[777 0 R/XYZ 0 642.985 null]
endobj
786 0 obj[777 0 R/XYZ 0 642.985 null]
endobj
787 0 obj[777 0 R/XYZ 0 642.985 null]
endobj
788 0 obj[777 0 R/XYZ 0 642.985 null]
endobj
789 0 obj[777 0 R/XYZ 0 642.985 null]
endobj
790 0 obj<>/A<0; únode_toc_node_sec_6.3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
791 0 obj[777 0 R/XYZ 0 359.682 null]
endobj
792 0 obj[777 0 R/XYZ 0 150.79 null]
endobj
793 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
794 0 obj[747 0 R]
endobj
795 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
796 0 obj[795 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R]
endobj
797 0 obj[793 0 R/XYZ 0 663.63 null]
endobj
798 0 obj[793 0 R/XYZ 0 663.63 null]
endobj
799 0 obj[793 0 R/XYZ 0 663.63 null]
endobj
800 0 obj<>/A<0; únode_toc_node_sec_6.4)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
801 0 obj<>/A<>/Border[0 0 0]>>
endobj
802 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
803 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
804 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
805 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
806 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 295.6148 747.0696 Tm
([Go to )Tj
ET
0 0 1 RG
0.592 w 10 M 0 j 0 J []0 d
333.143 745.293 m
354.083 745.293 l
S
0 0 1 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 333.1428 747.0696 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
360.578 745.293 m
405.315 745.293 l
S
0 0 1 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 360.5776 747.0696 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
411.81 745.293 m
433.451 745.293 l
S
0 0 1 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 411.81 747.0696 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
476.019 745.293 m
519.315 745.293 l
S
0 0 1 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 476.0193 747.0696 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
533.383 745.293 m
561.519 745.293 l
S
0 0 1 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 533.3829 747.0696 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
1.931 w
45.428 697.225 m
151.422 697.225 l
S
0 0 1 rg
BT
/T1_2 1 Tf
22.9822 0 0 22.9822 45.4277 703.0162 Tm
(Chapter 6)Tj
0 0 0 rg
0 -1.948 TD
( )Tj
ET
45.428 627.179 m
157.811 627.179 l
S
0 0 1 rg
BT
/T1_2 1 Tf
22.9822 0 0 22.9822 45.4277 632.9704 Tm
(Recursion)Tj
0 0 0 rg
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 594.8873 Tm
(A procedure body can contain calls to other procedures, not least itself\
:)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_4 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0 0.502 rg
(factorial)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_4 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_4 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0 0 0.502 rg
(*)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(factorial)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(This )Tj
/T1_1 1 Tf
(recursive)Tj
/T1_0 1 Tf
( procedure calculates the )Tj
/T1_1 1 Tf
(factorial)Tj
/T1_0 1 Tf
( of a number. If the number is )Tj
0 0.502 0 rg
/T1_3 1 Tf
(0)Tj
0 0 0 rg
/T1_0 1 Tf
(, the answer is )Tj
0 0.502 0 rg
/T1_3 1 Tf
(1)Tj
0 0 0 rg
/T1_0 1 Tf
(. )Tj
0 -1.205 TD
(For any other number )Tj
0 0 0.502 rg
/T1_3 1 Tf
(n)Tj
0 0 0 rg
/T1_0 1 Tf
(, the procedure uses itself to calculate the factorial of )Tj
0 0 0.502 rg
/T1_3 1 Tf
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0 0 0 rg
/T1_0 1 Tf
(, multiplies )Tj
T*
(that subresult by )Tj
0 0 0.502 rg
/T1_3 1 Tf
(n)Tj
0 0 0 rg
/T1_0 1 Tf
(, and returns the product.)Tj
0 -2.557 TD
(Mutually recursive procedures are also possible. The following predicate\
s for evenness and )Tj
0 -1.2 TD
(oddness use each other:)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_4 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0 0.502 rg
(is-even?)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_4 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_4 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0 0 0.502 rg
(is-odd?)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\))Tj
0 -2.4 TD
(\()Tj
0.6 0 0 rg
/T1_4 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( )Tj
0 0 0.502 rg
(is-odd?)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_4 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_4 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0 0 0.502 rg
(is-even?)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(These definitions are offered here only as simple illustrations of mutua\
l recursion. Scheme already )Tj
0 -1.205 TD
(provides the primitive predicates )Tj
0 0 0.502 rg
/T1_3 1 Tf
(even?)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_3 1 Tf
(odd?)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
ET
1.511 w
45.428 152.38 m
80.429 152.38 l
S
0.6 0 0 RG
0.906 w
80.429 154.193 m
145.179 154.193 l
S
0 0 1 rg
BT
/T1_2 1 Tf
17.9861 0 0 17.9861 45.4277 156.9122 Tm
(6.1 )Tj
0.6 0 0 rg
/T1_4 1 Tf
(letrec)Tj
0 0 0 rg
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 120.1591 Tm
(If we wanted the above procedures as local variables, we could try to us\
e a )Tj
0.6 0 0 rg
/T1_4 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( form:)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_4 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \(\()Tj
0 0 0.502 rg
(local-even?)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_4 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_4 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(local-odd?)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(local-odd?)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_4 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_3 1 Tf
( \()Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
(\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-8.html \(1 o\
f 4\)11/3/2006 8:49:43 PM)Tj
ET
EMC
endstream
endobj
807 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 77.9026 747.007 Tm
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(local-even?)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(local-even?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(23)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(local-odd?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(23)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(This won't quite work, because the occurrences of )Tj
0 0 0.502 rg
/T1_1 1 Tf
(local-even?)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(local-odd?)Tj
0 0 0 rg
/T1_0 1 Tf
( in the )Tj
0 -1.205 TD
(initializations don't refer to the lexical variables themselves. Changin\
g the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( to a )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let*)Tj
0 0 0 rg
/T1_0 1 Tf
( won't )Tj
0 -1.205 TD
(work either, for while the )Tj
0 0 0.502 rg
/T1_1 1 Tf
(local-even?)Tj
0 0 0 rg
/T1_0 1 Tf
( inside )Tj
0 0 0.502 rg
/T1_1 1 Tf
(local-odd?)Tj
0 0 0 rg
/T1_0 1 Tf
('s body refers to the correct )Tj
0 -1.205 TD
(procedure value, the )Tj
0 0 0.502 rg
/T1_1 1 Tf
(local-odd?)Tj
0 0 0 rg
/T1_0 1 Tf
( in )Tj
0 0 0.502 rg
/T1_1 1 Tf
(local-even?)Tj
0 0 0 rg
/T1_0 1 Tf
('s body still points elsewhere.)Tj
0 -2.562 TD
(To solve problems like this, Scheme provides the form )Tj
0.6 0 0 rg
/T1_2 1 Tf
(letrec)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(letrec)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0 0.502 rg
(local-even?)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0 0 0.502 rg
(local-odd?)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(local-odd?)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0 0 0.502 rg
(local-even?)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(n)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(local-even?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(23)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(local-odd?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(23)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The lexical variables introduced by a )Tj
0.6 0 0 rg
/T1_2 1 Tf
(letrec)Tj
0 0 0 rg
/T1_0 1 Tf
( are visible not only in the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(letrec)Tj
0 0 0 rg
/T1_0 1 Tf
(-body but also )Tj
0 -1.205 TD
(within all the initializations. )Tj
0.6 0 0 rg
/T1_2 1 Tf
(letrec)Tj
0 0 0 rg
/T1_0 1 Tf
( is thus tailor-made for defining recursive and mutually )Tj
0 -1.2 TD
(recursive local procedures.)Tj
ET
0 0 1 RG
1.511 w 10 M 0 j 0 J []0 d
45.428 368.767 m
145.394 368.767 l
S
0.6 0 0 RG
0.906 w
145.394 370.58 m
177.769 370.58 l
S
0 0 1 rg
BT
/T1_3 1 Tf
17.9861 0 0 17.9861 45.4277 373.3 Tm
(6.2 Named )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 336.5469 Tm
(A recursive procedure defined using )Tj
0.6 0 0 rg
/T1_2 1 Tf
(letrec)Tj
0 0 0 rg
/T1_0 1 Tf
( can describe loops. Let's say we want to display a )Tj
0 -1.205 TD
(countdown from )Tj
0 0.502 0 rg
/T1_1 1 Tf
(10)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(letrec)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0 0.502 rg
(countdown)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(liftoff)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(countdown)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\)\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(countdown)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(10)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(This outputs on the console the numbers )Tj
0 0.502 0 rg
/T1_1 1 Tf
(10)Tj
0 0 0 rg
/T1_0 1 Tf
( down to )Tj
0 0.502 0 rg
/T1_1 1 Tf
(1)Tj
0 0 0 rg
/T1_0 1 Tf
(, and returns the result )Tj
0 0 0.502 rg
/T1_1 1 Tf
(liftoff)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.562 TD
(Scheme allows a variant of )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( called )Tj
/T1_4 1 Tf
(named)Tj
/T1_0 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( to write this kind of loop more compactly:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(countdown)Tj
0.647 0.165 0.165 rg
( \(\()Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(10)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(=)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(liftoff)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-8.html \(2 o\
f 4\)11/3/2006 8:49:43 PM)Tj
ET
EMC
endstream
endobj
808 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 77.9026 747.007 Tm
( \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(countdown)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(-)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Note the presence of a variable identifying the loop immediately after t\
he )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
(. This program is )Tj
0 -1.205 TD
(equivalent to the one written with )Tj
0.6 0 0 rg
/T1_2 1 Tf
(letrec)Tj
0 0 0 rg
/T1_0 1 Tf
(. You may consider the named )Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0 0 0 rg
/T1_0 1 Tf
( to be a macro \(chap )Tj
ET
0 0 1 RG
0.655 w 10 M 0 j 0 J []0 d
45.428 664.937 m
51.923 664.937 l
S
0 0 1 rg
BT
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 666.901 Tm
(8)Tj
0 0 0 rg
(\) expanding to the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(letrec)Tj
0 0 0 rg
/T1_0 1 Tf
( form.)Tj
ET
1.511 w
45.428 622.693 m
151.384 622.693 l
S
0 0 1 rg
BT
/T1_3 1 Tf
17.9861 0 0 17.9861 45.4277 627.2253 Tm
(6.3 Iteration)Tj
0 0 0.502 rg
/T1_1 1 Tf
12.99 0 0 12.99 45.4277 590.6973 Tm
(countdown)Tj
0 0 0 rg
/T1_0 1 Tf
( defined above is really a recursive procedure. Scheme can define loops \
only through )Tj
0 -1.2 TD
(recursion. There are no special looping or iteration constructs.)Tj
0 -2.557 TD
(Nevertheless, the loop as defined above is a )Tj
/T1_4 1 Tf
(genuine)Tj
/T1_0 1 Tf
( loop, in exactly the same way that other )Tj
0 -1.2 TD
(languages bill their loops. Ie, Scheme takes special care to ensure that\
recursion of the type used )Tj
T*
(above will not generate the procedure call/return overhead.)Tj
0 -2.562 TD
(Scheme does this by a process called )Tj
/T1_4 1 Tf
(tail-call elimination)Tj
/T1_0 1 Tf
(. If you look closely at the )Tj
0 0 0.502 rg
/T1_1 1 Tf
(countdown)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.205 TD
(procedure, you will note that when the recursive call occurs in )Tj
0 0 0.502 rg
/T1_1 1 Tf
(countdown)Tj
0 0 0 rg
/T1_0 1 Tf
('s body, it is the )Tj
/T1_4 1 Tf
(tail )Tj
T*
(call)Tj
/T1_0 1 Tf
(, or the very last thing done -- each invocation of )Tj
0 0 0.502 rg
/T1_1 1 Tf
(countdown)Tj
0 0 0 rg
/T1_0 1 Tf
( either does not call itself, or )Tj
0 -1.2 TD
(when it does, it does so as its very last act. To a Scheme implementatio\
n, this makes the recursion )Tj
T*
(indistinguishable from iteration. So go ahead, use recursion to write lo\
ops. It's safe.)Tj
0 -2.557 TD
(Here's another example of a useful tail-recursive procedure:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(list-position)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(l)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(loop)Tj
0.647 0.165 0.165 rg
( \(\()Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(0)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(l)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(l)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(null?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(l)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(eqv?)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(car)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(l)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0 0 0.502 rg
(loop)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(cdr)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(l)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\)\)\))Tj
0 0 0.502 rg
-2.5 -2.557 Td
(list-position)Tj
0 0 0 rg
/T1_0 1 Tf
( finds the index of the first occurrence of the object )Tj
0 0 0.502 rg
/T1_1 1 Tf
(o)Tj
0 0 0 rg
/T1_0 1 Tf
( in the list )Tj
0 0 0.502 rg
/T1_1 1 Tf
(l)Tj
0 0 0 rg
/T1_0 1 Tf
(. If the object )Tj
0 -1.205 TD
(is not found in the list, the procedure returns )Tj
0 0.502 0 rg
/T1_1 1 Tf
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.557 TD
(Here's yet another tail-recursive procedure, one that reverses its argum\
ent list ``in place'', ie, by )Tj
0 -1.2 TD
(mutating the contents of the existing list, and without allocating a new\
one: )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(reverse!)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(s)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(loop)Tj
0.647 0.165 0.165 rg
( \(\()Tj
0 0 0.502 rg
(s)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(s)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(r)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\(\)\)\))Tj
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(null?)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(s)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0 0.502 rg
(r)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0 0.502 rg
(d)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(cdr)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(s)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(set-cdr!)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(s)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(r)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(loop)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(d)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(s)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\)\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-8.html \(3 o\
f 4\)11/3/2006 8:49:43 PM)Tj
ET
EMC
endstream
endobj
809 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 736.351 Tm
(\()Tj
0 0 0.502 rg
/T1_1 1 Tf
(reverse!)Tj
0 0 0 rg
/T1_0 1 Tf
( is a useful enough procedure that it is provided primitively in many Sc\
heme dialects, )Tj
0 -1.2 TD
(eg, MzScheme and Guile.\) )Tj
0 -2.557 TD
(For some numerical examples of recursion \(including iteration\), see Ap\
pendix )Tj
ET
0 0 1 RG
0.655 w 10 M 0 j 0 J []0 d
455.624 685.582 m
464.289 685.582 l
S
0 0 1 rg
BT
/T1_0 1 Tf
12.99 0 0 12.99 455.6245 687.5459 Tm
(C)Tj
0 0 0 rg
(.)Tj
ET
1.511 w
45.428 643.338 m
371.3 643.338 l
S
0 0 1 rg
BT
/T1_2 1 Tf
17.9861 0 0 17.9861 45.4277 647.8703 Tm
(6.4 Mapping a procedure across a list)Tj
0 0 0 rg
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 611.4048 Tm
(A special kind of iteration involves repeating the same action for each \
element of a list. Scheme )Tj
0 -1.205 TD
(offers two procedures for this situation: )Tj
0 0 0.502 rg
/T1_1 1 Tf
(map)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(for-each)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.562 TD
(The )Tj
0 0 0.502 rg
/T1_1 1 Tf
(map)Tj
0 0 0 rg
/T1_0 1 Tf
( procedure applies a given procedure to every element of a given list, a\
nd returns the list )Tj
0 -1.2 TD
(of the results. Eg,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(map)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(add2)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_3 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(4)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The )Tj
0 0 0.502 rg
/T1_1 1 Tf
(for-each)Tj
0 0 0 rg
/T1_0 1 Tf
( procedure also applies a procedure to each element in a list, but retur\
ns void. The )Tj
0 -1.2 TD
(procedure application is done purely for any side-effects it may cause. \
Eg,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(for-each)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("one ")Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("two ")Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("buckle my shoe")Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(has the side-effect of displaying the strings \(in the order they appear\
\) on the console.)Tj
0 -2.562 TD
(The procedures applied by )Tj
0 0 0.502 rg
/T1_1 1 Tf
(map)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(for-each)Tj
0 0 0 rg
/T1_0 1 Tf
( need not be one-argument procedures. For )Tj
0 -1.205 TD
(example, given an )Tj
0 0 0.502 rg
/T1_1 1 Tf
(n)Tj
0 0 0 rg
/T1_0 1 Tf
(-argument procedure, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(map)Tj
0 0 0 rg
/T1_0 1 Tf
( takes )Tj
0 0 0.502 rg
/T1_1 1 Tf
(n)Tj
0 0 0 rg
/T1_0 1 Tf
( lists and applies the procedure to every set )Tj
0 -1.205 TD
(of )Tj
0 0 0.502 rg
/T1_1 1 Tf
(n)Tj
0 0 0 rg
/T1_0 1 Tf
( of arguments selected from across the lists. Eg,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(map)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0.6 0 0 rg
/T1_3 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(10)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(20)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(30)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_3 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(10)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(20)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0.502 0 rg
(30)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(map)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\) )Tj
0.6 0 0 rg
/T1_3 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(10)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(20)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(30)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0.502 0.502 rg
/T1_3 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(11)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(22)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(33)Tj
0.647 0.165 0.165 rg
(\))Tj
1 0 0 rg
/T1_4 1 Tf
16.76 -2.552 Td
([Go to )Tj
ET
0.592 w
333.143 172.048 m
354.083 172.048 l
S
0 0 1 rg
BT
/T1_4 1 Tf
12.99 0 0 12.99 333.1428 173.8249 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
360.578 172.048 m
405.315 172.048 l
S
0 0 1 rg
BT
/T1_4 1 Tf
12.99 0 0 12.99 360.5776 173.8249 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
411.81 172.048 m
433.451 172.048 l
S
0 0 1 rg
BT
/T1_4 1 Tf
12.99 0 0 12.99 411.81 173.8249 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
476.019 172.048 m
519.315 172.048 l
S
0 0 1 rg
BT
/T1_4 1 Tf
12.99 0 0 12.99 476.0193 173.8249 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
533.383 172.048 m
561.519 172.048 l
S
0 0 1 rg
BT
/T1_4 1 Tf
12.99 0 0 12.99 533.3829 173.8249 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-8.html \(4 o\
f 4\)11/3/2006 8:49:43 PM)Tj
ET
EMC
endstream
endobj
810 0 obj(Teach Yourself Scheme in Fixnum Days )
endobj
811 0 obj<>
endobj
812 0 obj(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-8.html)
endobj
813 0 obj( \('Ú ‰ÜÕ Á‹Ç*”œ)
endobj
814 0 obj<>
endobj
815 0 obj<>
endobj
816 0 obj({>s¸:ô_ƒ¯SÄ‘-¦)
endobj
817 0 obj<>
endobj
818 0 obj<>
endobj
819 0 obj<><><><>]/P 9 0 R/S/Article/T()/Pg 820 0 R>>
endobj
820 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
821 0 obj[819 0 R]
endobj
822 0 obj<>/A<>/Border[0 0 0]>>
endobj
823 0 obj[822 0 R 824 0 R 825 0 R 826 0 R 827 0 R 829 0 R 830 0 R 833 0 R 839 0 R]
endobj
824 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
825 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
826 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
827 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
828 0 obj[820 0 R/XYZ 0 719.2 null]
endobj
829 0 obj<>/A<0; únode_toc_node_chap_7)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
830 0 obj<>/A<0; únode_toc_node_chap_7)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
831 0 obj[820 0 R/XYZ 0 592.985 null]
endobj
832 0 obj[820 0 R/XYZ 0 540.385 null]
endobj
833 0 obj<>/A<0; únode_toc_node_sec_7.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
834 0 obj[820 0 R/XYZ 0 443.523 null]
endobj
835 0 obj[820 0 R/XYZ 0 340.456 null]
endobj
836 0 obj[820 0 R/XYZ 0 340.456 null]
endobj
837 0 obj[820 0 R/XYZ 0 340.456 null]
endobj
838 0 obj[820 0 R/XYZ 0 270.921 null]
endobj
839 0 obj<>/A<0; únode_toc_node_sec_7.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
840 0 obj[820 0 R/XYZ 0 121.459 null]
endobj
841 0 obj[820 0 R/XYZ 0 68.792 null]
endobj
842 0 obj[820 0 R/XYZ 0 68.792 null]
endobj
843 0 obj[820 0 R/XYZ 0 68.792 null]
endobj
844 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
845 0 obj[819 0 R]
endobj
846 0 obj[844 0 R/XYZ 0 667.522 null]
endobj
847 0 obj[844 0 R/XYZ 0 667.522 null]
endobj
848 0 obj[844 0 R/XYZ 0 667.522 null]
endobj
849 0 obj<>/A<0; únode_toc_node_sec_7.3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
850 0 obj[849 0 R]
endobj
851 0 obj[844 0 R/XYZ 0 623.261 null]
endobj
852 0 obj[844 0 R/XYZ 0 623.261 null]
endobj
853 0 obj[844 0 R/XYZ 0 623.261 null]
endobj
854 0 obj[844 0 R/XYZ 0 623.261 null]
endobj
855 0 obj[844 0 R/XYZ 0 448.593 null]
endobj
856 0 obj[844 0 R/XYZ 0 448.593 null]
endobj
857 0 obj[844 0 R/XYZ 0 345.459 null]
endobj
858 0 obj[844 0 R/XYZ 0 345.459 null]
endobj
859 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
860 0 obj<>
endobj
861 0 obj[819 0 R]
endobj
862 0 obj[859 0 R/XYZ 0 529.922 null]
endobj
863 0 obj<>
endobj
864 0 obj<0; únode_toc_node_chap_Temp_2)]/Names[(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_350)855 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_352)856 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_354)857 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_356)858 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_358)867 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_360)868 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_362)869 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_364)870 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_366)873 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_368)876 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_370)877 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_372)878 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_374)879 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_idx_376)884 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_sec_7.1)832 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_sec_7.2)838 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_sec_7.3)848 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_sec_7.3.1)862 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_sec_7.4)871 0 R(Ü`ù¶ÄØeJ£ú‰RKð,node_sec_7.5)880 0 R(ëÏãå¾ÊMô},¿ÙR´:node_chap_9)990 0 R(ëÏãå¾ÊMô},¿ÙR´:node_idx_400)993 0 R(ëÏãå¾ÊMô},¿ÙR´:node_idx_402)994 0 R(ëÏãå¾ÊMô},¿ÙR´:node_idx_404)995 0 R(ëÏãå¾ÊMô},¿ÙR´:node_sec_9.1)999 0 R(ëÏãå¾ÊMô},¿ÙR´:node_sec_9.2)1003 0 R(ôlx&d‘B³Q²>0; únode_tag_Temp_1)21 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_1)28 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_10)126 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_11)130 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_12)138 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_13)146 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_14)160 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_15)174 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_16)182 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_17)190 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_2)30 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_3)56 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_4)71 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_5)81 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_6)87 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_7)97 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_8)111 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_9)119 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_A)203 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_B)213 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_C)215 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_D)223 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_E)225 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_F)227 0 R(ôlx&d‘B³Q²>0; únode_toc_node_chap_Temp_2)26 0 R]>>
endobj
865 0 obj<>/A<0; únode_toc_node_sec_7.3.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
866 0 obj[865 0 R 872 0 R]
endobj
867 0 obj[859 0 R/XYZ 0 489.537 null]
endobj
868 0 obj[859 0 R/XYZ 0 489.537 null]
endobj
869 0 obj[859 0 R/XYZ 0 161.267 null]
endobj
870 0 obj[859 0 R/XYZ 0 161.267 null]
endobj
871 0 obj[859 0 R/XYZ 0 161.267 null]
endobj
872 0 obj<>/A<0; únode_toc_node_sec_7.4)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
873 0 obj[859 0 R/XYZ 0 117.006 null]
endobj
874 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
875 0 obj[819 0 R]
endobj
876 0 obj[874 0 R/XYZ 0 570.0 null]
endobj
877 0 obj[874 0 R/XYZ 0 397.533 null]
endobj
878 0 obj[874 0 R/XYZ 0 256.398 null]
endobj
879 0 obj[874 0 R/XYZ 0 256.398 null]
endobj
880 0 obj[874 0 R/XYZ 0 256.398 null]
endobj
881 0 obj<>/A<0; únode_toc_node_sec_7.5)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
882 0 obj[881 0 R]
endobj
883 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
884 0 obj[883 0 R/XYZ 0 743.734 null]
endobj
885 0 obj[819 0 R]
endobj
886 0 obj<>/A<>/Border[0 0 0]>>
endobj
887 0 obj[886 0 R 888 0 R 889 0 R 890 0 R 891 0 R]
endobj
888 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
889 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
890 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
891 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
892 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
BT
/T1_1 1 Tf
14 0 0 14 271.014 744.9756 Tm
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 743.06 m
334.028 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 311.46 744.9756 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 743.06 m
389.244 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 341.028 744.9756 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 743.06 m
419.568 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 396.244 744.9756 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 743.06 m
512.108 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 465.446 744.9756 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 743.06 m
557.594 743.06 l
S
0 0 1 rg
BT
/T1_1 1 Tf
14 0 0 14 527.27 744.9756 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
2.081 w
48.96 691.255 m
163.196 691.255 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 697.4968 Tm
(Chapter 7)Tj
0 0 0 rg
0 -1.948 TD
( )Tj
ET
48.96 615.763 m
82.002 615.763 l
S
0 0 1 rg
BT
/T1_2 1 Tf
24.7692 0 0 24.7692 48.96 622.0045 Tm
(I/O)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 580.9602 Tm
(Scheme has input/output \(I/O\) procedures that will let you read from a\
n input port or write )Tj
0 -1.2 TD
(to an output port. Ports can be associated with the console, files or st\
rings.)Tj
ET
1.628 w
48.96 518.515 m
163.155 518.515 l
S
0 0 1 rg
BT
/T1_2 1 Tf
19.3846 0 0 19.3846 48.96 523.3995 Tm
(7.1 Reading)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 484.0986 Tm
(Scheme's reader procedures take an optional input port argument. If the \
port is not )Tj
T*
(specified, the current input port \(usually the console\) is assumed.)Tj
0 -2.557 TD
(Reading can be character-, line- or s-expression-based. Each time a read\
is performed, the )Tj
0 -1.2 TD
(port's state changes so that the next read will read material following \
what was already )Tj
T*
(read. If the port has no more material to be read, the reader procedure \
returns a specific )Tj
T*
(datum called the end-of-file or eof object. This datum is the only value\
that satisfies the )Tj
0 0 0.502 rg
/T1_3 1 Tf
0 -1.205 TD
(eof-object?)Tj
0 0 0 rg
/T1_0 1 Tf
( predicate.)Tj
0 -2.562 TD
(The procedure )Tj
0 0 0.502 rg
/T1_3 1 Tf
(read-char)Tj
0 0 0 rg
/T1_0 1 Tf
( reads the next character from the port. )Tj
0 0 0.502 rg
/T1_3 1 Tf
(read-line)Tj
0 0 0 rg
/T1_0 1 Tf
( reads the )Tj
0 -1.205 TD
(next line, returning it as a string \(the final newline is not included\)\
. The procedure )Tj
0 0 0.502 rg
/T1_3 1 Tf
(read)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.2 TD
(reads the next s-expression.)Tj
ET
48.96 249.051 m
153.443 249.051 l
S
0 0 1 rg
BT
/T1_2 1 Tf
19.3846 0 0 19.3846 48.96 253.9358 Tm
(7.2 Writing)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 214.6349 Tm
(Scheme's writer procedures take the object that is to be written and an \
optional output port )Tj
T*
(argument. If the port is not specified, the current output port \(usuall\
y the console\) is )Tj
T*
(assumed.)Tj
0 -2.557 TD
(Writing can be character- or s-expression-based.)Tj
0 -2.562 TD
(The procedure )Tj
0 0 0.502 rg
/T1_3 1 Tf
(write-char)Tj
0 0 0 rg
/T1_0 1 Tf
( writes the given character \(without the )Tj
/T1_3 1 Tf
(#\\)Tj
/T1_0 1 Tf
(\) to the output )Tj
0 -1.2 TD
(port.)Tj
0 -2.562 TD
(The procedures )Tj
0 0 0.502 rg
/T1_3 1 Tf
(write)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_3 1 Tf
(display)Tj
0 0 0 rg
/T1_0 1 Tf
( both write the given s-expression to the port, with )Tj
0 -1.205 TD
(one difference: )Tj
0 0 0.502 rg
/T1_3 1 Tf
(write)Tj
0 0 0 rg
/T1_0 1 Tf
( attempts to use a machine-readable format and )Tj
0 0 0.502 rg
/T1_3 1 Tf
(display)Tj
0 0 0 rg
/T1_0 1 Tf
( doesn't. )Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-9.html \(1 o\
f 5\)11/3/2006 8:49:49 PM)Tj
ET
EMC
endstream
endobj
893 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
14 0 0 14 48.96 743.9653 Tm
(Eg, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(write)Tj
0 0 0 rg
/T1_0 1 Tf
( uses double quotes for strings and the )Tj
/T1_1 1 Tf
(#\\)Tj
/T1_0 1 Tf
( syntax for characters. )Tj
0 0 0.502 rg
/T1_1 1 Tf
(display)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.2 TD
(doesn't.)Tj
0 -2.562 TD
(The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(newline)Tj
0 0 0 rg
/T1_0 1 Tf
( starts a new line on the output port.)Tj
ET
0 0 1 RG
1.628 w 10 M 0 j 0 J []0 d
48.96 645.652 m
173.933 645.652 l
S
0 0 1 rg
BT
/T1_2 1 Tf
19.3846 0 0 19.3846 48.96 650.5373 Tm
(7.3 File ports)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 611.2364 Tm
(Scheme's I/O procedures do not need a port argument if the port happens \
to be standard )Tj
0 -1.2 TD
(input or standard output. However, if you need these ports explicitly, t\
he zero-argument )Tj
0 -1.205 TD
(procedures )Tj
0 0 0.502 rg
/T1_1 1 Tf
(current-input-port)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(current-output-port)Tj
0 0 0 rg
/T1_0 1 Tf
( furnish them. )Tj
0 -1.2 TD
(Thus,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
(\()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(current-output-port)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(have the same behavior.)Tj
0 -2.562 TD
(A port is associated with a file by )Tj
/T1_3 1 Tf
(opening)Tj
/T1_0 1 Tf
( the file. The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(open-input-file)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.2 TD
(takes a filename argument and returns a new input port associated with i\
t. The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
0 -1.205 TD
(open-output-file)Tj
0 0 0 rg
/T1_0 1 Tf
( takes a filename argument and returns a new output port )Tj
0 -1.2 TD
(associated with it. It is an error to open an input file that doesn't ex\
ist, or to open an output )Tj
T*
(file that already exists.)Tj
0 -2.562 TD
(After you have performed I/O on a port, you should close it with )Tj
0 0 0.502 rg
/T1_1 1 Tf
(close-input-port)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.205 TD
(or )Tj
0 0 0.502 rg
/T1_1 1 Tf
(close-output-port)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.562 TD
(In the following, assume the file )Tj
/T1_1 1 Tf
(hello.txt)Tj
/T1_0 1 Tf
( contains the single word )Tj
0 0 0.502 rg
/T1_1 1 Tf
(hello)Tj
0 0 0 rg
/T1_0 1 Tf
(. )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_4 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(open-input-file)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("hello.txt")Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(read-char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_4 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#\\h)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0.6 0 0 rg
/T1_4 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(j)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(read)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0.502 rg
0 -2.4 TD
(j)Tj
0 0.502 0.502 rg
/T1_4 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(ello)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Assume the file )Tj
/T1_1 1 Tf
(greeting.txt)Tj
/T1_0 1 Tf
( does not exist before the following programs are fed to )Tj
0 -1.2 TD
(the listener:)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-9.html \(2 o\
f 5\)11/3/2006 8:49:49 PM)Tj
ET
EMC
endstream
endobj
894 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
14 0 0 14 83.96 742.8972 Tm
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(open-output-file)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("greeting.txt")Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("hello")Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(write-char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\space)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
(\()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(world)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
(\()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(close-output-port)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The file )Tj
/T1_1 1 Tf
(greeting.txt)Tj
/T1_0 1 Tf
( will now contain the line:)Tj
/T1_1 1 Tf
2.5 -2.562 Td
(hello world )Tj
ET
0 0 1 RG
1.357 w 10 M 0 j 0 J []0 d
48.96 511.697 m
426.863 511.697 l
S
0 0 1 rg
BT
/T1_3 1 Tf
16.1538 0 0 16.1538 48.96 515.7674 Tm
(7.3.1 Automatic opening and closing of file ports)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 477.4452 Tm
(Scheme supplies the procedures )Tj
0 0 0.502 rg
/T1_1 1 Tf
(call-with-input-file)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(call-with-)Tj
0 -1.205 TD
(output-file)Tj
0 0 0 rg
/T1_0 1 Tf
( that will take care of opening a port and closing it after you're done \
with )Tj
0 -1.2 TD
(it.)Tj
0 -2.562 TD
(The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(call-with-input-file)Tj
0 0 0 rg
/T1_0 1 Tf
( takes a filename argument and a procedure. )Tj
0 -1.2 TD
(The procedure is applied to an input port opened on the file. When the p\
rocedure )Tj
T*
(completes, its result is returned after ensuring that the port is closed\
.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(call-with-input-file)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("hello.txt")Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let*)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0 0.502 rg
(a)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(read-char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(b)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(read-char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(c)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(read-char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(a)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(b)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(c)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0.502 0 rg
(#\\h)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\e)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\l)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(call-with-output-file)Tj
0 0 0 rg
/T1_0 1 Tf
( does the analogous services for an output )Tj
T*
(file.)Tj
ET
1.628 w
48.96 139.397 m
196.535 139.397 l
S
0 0 1 rg
BT
/T1_3 1 Tf
19.3846 0 0 19.3846 48.96 144.2824 Tm
(7.4 String ports)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 104.9141 Tm
(It is often convenient to associate ports with strings. Thus, the proced\
ure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(open-input-)Tj
0 -1.205 TD
(string)Tj
0 0 0 rg
/T1_0 1 Tf
( associates a port with a given string. Reader procedures on this port w\
ill read off )Tj
0 -1.2 TD
(the string:)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-9.html \(3 o\
f 5\)11/3/2006 8:49:49 PM)Tj
ET
EMC
endstream
endobj
895 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
14 0 0 14 83.96 744.9082 Tm
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(open-input-string)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("hello world")Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(read-char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#\\h)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(read)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(ello)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(read)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(i)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(world)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(open-output-string)Tj
0 0 0 rg
/T1_0 1 Tf
( creates an output port that will eventually be )Tj
T*
(used to create a string:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(open-output-string)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -2.4 TD
(\()Tj
0 0 0.502 rg
(write)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(hello)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
(\()Tj
0 0 0.502 rg
(write-char)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(#\\,)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
(\()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(" ")Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
(\()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("world")Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(You can now use the procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(get-output-string)Tj
0 0 0 rg
/T1_0 1 Tf
( to get the accumulated string in )Tj
0 -1.205 TD
(the string port )Tj
0 0 0.502 rg
/T1_1 1 Tf
(o)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(get-output-string)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(o)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
("hello, world")Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(String ports need not be explicitly closed.)Tj
ET
0 0 1 RG
1.628 w 10 M 0 j 0 J []0 d
48.96 234.528 m
206.247 234.528 l
S
0 0 1 rg
BT
/T1_3 1 Tf
19.3846 0 0 19.3846 48.96 239.4127 Tm
(7.5 Loading files)Tj
0 0 0 rg
/T1_0 1 Tf
14 0 0 14 48.96 200.0444 Tm
(We have already seen the procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(load)Tj
0 0 0 rg
/T1_0 1 Tf
( that loads files containing Scheme code. )Tj
/T1_4 1 Tf
T*
(Loading)Tj
/T1_0 1 Tf
( a file consists in evaluating in sequence every Scheme form in the file\
. The )Tj
0 -1.205 TD
(pathname argument given to )Tj
0 0 0.502 rg
/T1_1 1 Tf
(load)Tj
0 0 0 rg
/T1_0 1 Tf
( is reckoned relative to the current working directory of )Tj
0 -1.2 TD
(Scheme, which is normally the directory in which the Scheme executable w\
as called.)Tj
0 -2.557 TD
(Files can load other files, and this is useful in a large program spanni\
ng many files. )Tj
0 -1.205 TD
(Unfortunately, unless full pathnames are used, the argument file of a )Tj
0 0 0.502 rg
/T1_1 1 Tf
(load)Tj
0 0 0 rg
/T1_0 1 Tf
( is dependent )Tj
0 -1.2 TD
(on Scheme's current directory. Supplying full pathnames is not always co\
nvenient, )Tj
T*
(because we would like to move the program files as a unit \(preserving t\
heir relative )Tj
T*
(pathnames\), perhaps to many different machines. )Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-9.html \(4 o\
f 5\)11/3/2006 8:49:49 PM)Tj
ET
EMC
endstream
endobj
896 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 9 0 0 9 18 780.17 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
14 0 0 14 48.96 731.6423 Tm
(MzScheme provides the )Tj
0 0 0.502 rg
/T1_1 1 Tf
(load-relative)Tj
0 0 0 rg
/T1_0 1 Tf
( procedure that greatly helps in fixing the files )Tj
0 -1.205 TD
(to be loaded. )Tj
0 0 0.502 rg
/T1_1 1 Tf
(load-relative)Tj
0 0 0 rg
/T1_0 1 Tf
(, like )Tj
0 0 0.502 rg
/T1_1 1 Tf
(load)Tj
0 0 0 rg
/T1_0 1 Tf
(, takes a pathname argument. When a )Tj
0 0 0.502 rg
/T1_1 1 Tf
(load-)Tj
0 -1.205 TD
(relative)Tj
0 0 0 rg
/T1_0 1 Tf
( call occurs in a file )Tj
0 0 0.502 rg
/T1_1 1 Tf
(foo.scm)Tj
0 0 0 rg
/T1_0 1 Tf
(, the path of its argument is reckoned from the )Tj
0 -1.205 TD
(directory of the calling file )Tj
0 0 0.502 rg
/T1_1 1 Tf
(foo.scm)Tj
0 0 0 rg
/T1_0 1 Tf
(. In particular, this pathname is reckoned )Tj
0 -1.2 TD
(independent of Scheme's current directory, and thus allows convenient mu\
ltifile program )Tj
T*
(development. )Tj
1 0 0 rg
/T1_2 1 Tf
15.861 -2.557 Td
([Go to )Tj
ET
0 0 1 RG
0.638 w 10 M 0 j 0 J []0 d
311.46 609.725 m
334.028 609.725 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 311.46 611.6401 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
341.028 609.725 m
389.244 609.725 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 341.028 611.6401 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
396.244 609.725 m
419.568 609.725 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 396.244 611.6401 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
465.446 609.725 m
512.108 609.725 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 465.446 611.6401 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
527.27 609.725 m
557.594 609.725 l
S
0 0 1 rg
BT
/T1_2 1 Tf
14 0 0 14 527.27 611.6401 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
9 0 0 9 18 7.17 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-9.html \(5 o\
f 5\)11/3/2006 8:49:49 PM)Tj
ET
EMC
endstream
endobj
897 0 obj(Teach Yourself Scheme in Fixnum Days )
endobj
898 0 obj<>
endobj
899 0 obj(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-9.html)
endobj
900 0 obj(Ü`ù¶ÄØeJ£ú‰RKð,)
endobj
901 0 obj<>
endobj
902 0 obj<>
endobj
903 0 obj(5µÑÕ½Èý‹±ÆÌ°ÛÖÏÇ)
endobj
904 0 obj<>
endobj
905 0 obj<>
endobj
906 0 obj<><><><><><>]/P 9 0 R/S/Article/T()/Pg 907 0 R>>
endobj
907 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
908 0 obj[906 0 R]
endobj
909 0 obj<>/A<>/Border[0 0 0]>>
endobj
910 0 obj[909 0 R 911 0 R 912 0 R 913 0 R 914 0 R 916 0 R 917 0 R 921 0 R 923 0 R]
endobj
911 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
912 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
913 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
914 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
915 0 obj[907 0 R/XYZ 0 723.154 null]
endobj
916 0 obj<>/A<0; únode_toc_node_chap_8)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
917 0 obj<>/A<0; únode_toc_node_chap_8)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
918 0 obj[907 0 R/XYZ 0 606.044 null]
endobj
919 0 obj[907 0 R/XYZ 0 461.67 null]
endobj
920 0 obj[907 0 R/XYZ 0 461.67 null]
endobj
921 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
922 0 obj[907 0 R/XYZ 0 447.035 null]
endobj
923 0 obj<>/A<Efootnote_Temp_5)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
924 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
925 0 obj[906 0 R]
endobj
926 0 obj[924 0 R/XYZ 0 453.89 null]
endobj
927 0 obj[924 0 R/XYZ 0 178.564 null]
endobj
928 0 obj<>/A<0; únode_toc_node_sec_8.1)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
929 0 obj[928 0 R]
endobj
930 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
931 0 obj<>
endobj
932 0 obj[906 0 R]
endobj
933 0 obj[930 0 R/XYZ 0 562.881 null]
endobj
934 0 obj[930 0 R/XYZ 0 562.881 null]
endobj
935 0 obj[930 0 R/XYZ 0 562.881 null]
endobj
936 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
937 0 obj[906 0 R]
endobj
938 0 obj[936 0 R/XYZ 0 582.614 null]
endobj
939 0 obj<>/A<0; únode_toc_node_sec_8.2)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
940 0 obj[939 0 R]
endobj
941 0 obj[936 0 R/XYZ 0 541.546 null]
endobj
942 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
943 0 obj[906 0 R]
endobj
944 0 obj[942 0 R/XYZ 0 307.162 null]
endobj
945 0 obj[942 0 R/XYZ 0 307.162 null]
endobj
946 0 obj[942 0 R/XYZ 0 66.9068 null]
endobj
947 0 obj[942 0 R/XYZ 0 66.9068 null]
endobj
948 0 obj<>/A<0; únode_toc_node_sec_8.3)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
949 0 obj[948 0 R]
endobj
950 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
951 0 obj[906 0 R]
endobj
952 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
953 0 obj[952 0 R]
endobj
954 0 obj<>/ProcSet[/PDF/Text]>>/Type/Page>>
endobj
955 0 obj[906 0 R]
endobj
956 0 obj[954 0 R/XYZ 0 421.04 null]
endobj
957 0 obj<>/A<Ecall_footnote_Temp_5)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
958 0 obj[957 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R]
endobj
959 0 obj<>/A<>/Border[0 0 0]>>
endobj
960 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
961 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
962 0 obj<>/A<0; únode_toc_start)/S/GoTo>>/PA<>/Border[0 0 0]>>
endobj
963 0 obj<>/A<>/PA<>/Border[0 0 0]>>
endobj
964 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
1 0 0 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 295.6148 747.0696 Tm
([Go to )Tj
ET
0 0 1 RG
0.592 w 10 M 0 j 0 J []0 d
333.143 745.293 m
354.083 745.293 l
S
0 0 1 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 333.1428 747.0696 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
360.578 745.293 m
405.315 745.293 l
S
0 0 1 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 360.5776 747.0696 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
411.81 745.293 m
433.451 745.293 l
S
0 0 1 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 411.81 747.0696 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
476.019 745.293 m
519.315 745.293 l
S
0 0 1 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 476.0193 747.0696 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
533.383 745.293 m
561.519 745.293 l
S
0 0 1 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 533.3829 747.0696 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
1.931 w
45.428 697.225 m
151.422 697.225 l
S
0 0 1 rg
BT
/T1_2 1 Tf
22.9822 0 0 22.9822 45.4277 703.0162 Tm
(Chapter 8)Tj
0 0 0 rg
0 -1.948 TD
( )Tj
ET
45.428 627.179 m
125.888 627.179 l
S
0 0 1 rg
BT
/T1_2 1 Tf
22.9822 0 0 22.9822 45.4277 632.9704 Tm
(Macros)Tj
0 0 0 rg
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 594.8873 Tm
(Users can create their own special forms by defining )Tj
/T1_1 1 Tf
(macros)Tj
/T1_0 1 Tf
(. A macro is a symbol that has a )Tj
/T1_1 1 Tf
0 -1.2 TD
(transformer procedure)Tj
/T1_0 1 Tf
( associated with it. When Scheme encounters a macro-expression -- ie, a \
)Tj
T*
(form whose head is a macro -- , it applies the macro's transformer to th\
e subforms in the macro-)Tj
T*
(expression, and evaluates the result of the transformation.)Tj
0 -2.557 TD
(Ideally, a macro specifies a purely textual transformation from code tex\
t to other code text. This )Tj
0 -1.2 TD
(kind of transformation is useful for abbreviating an involved and perhap\
s frequently occurring )Tj
T*
(textual pattern.)Tj
0 -2.825 TD
(A macro is )Tj
/T1_1 1 Tf
(defined)Tj
/T1_0 1 Tf
( using the special form )Tj
0.6 0 0 rg
/T1_3 1 Tf
(define-macro)Tj
0 0 0 rg
/T1_0 1 Tf
( \(but see sec )Tj
ET
0.655 w
426.124 445.071 m
445.245 445.071 l
S
0 0 1 rg
BT
/T1_0 1 Tf
12.99 0 0 12.99 426.1243 447.0352 Tm
(A.3)Tj
0 0 0 rg
(\).)Tj
ET
0.468 w
452.819 451.927 m
457.458 451.927 l
S
0 0 1 rg
BT
/T1_0 1 Tf
9.2785 0 0 9.2785 452.8186 453.3298 Tm
(3)Tj
0 0 0 rg
12.99 0 0 12.99 457.4579 447.0352 Tm
( For example, if )Tj
-31.719 -1.348 Td
(your Scheme lacks the conditional special form )Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
(, you could define )Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
( as the following )Tj
0 -1.2 TD
(macro:)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(define-macro)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
T*
( \()Tj
0.6 0 0 rg
/T1_3 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( \()Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
('if)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
('begin)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(This defines a )Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
(-transformer that would convert a )Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
(-expression into the equivalent )Tj
0.6 0 0 rg
/T1_3 1 Tf
(if)Tj
0 0 0 rg
/T1_0 1 Tf
(-)Tj
0 -1.205 TD
(expression. With this macro definition in place, the )Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
(-expression )Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( \()Tj
0 0 0.502 rg
(<)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(pressure)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(60)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(open-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(attach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(depress)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(detach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(close-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(will be converted to another expression, the result of applying the )Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
(-transformer to the )Tj
0.6 0 0 rg
/T1_3 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
(-)Tj
T*
(expression's subforms:)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(apply)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_3 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( \()Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
('if)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_3 1 Tf
('begin)Tj
0.647 0.165 0.165 rg
/T1_4 1 Tf
( )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-10.html \(1 \
of 7\)11/3/2006 8:50:00 PM)Tj
ET
EMC
endstream
endobj
965 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 77.9026 747.007 Tm
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\(\()Tj
0 0 0.502 rg
(<)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(pressure)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(60)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(open-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(attach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(depress)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(detach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(close-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(The transformation yields the list)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(<)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(pressure)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(60)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0 0 0.502 rg
(open-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(attach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(depress)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(detach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(close-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Scheme will then evaluate this expression, as it would any other.)Tj
0 -2.562 TD
(As an additional example, here is the macro-definition for )Tj
0.6 0 0 rg
/T1_2 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
('s counterpart )Tj
0.6 0 0 rg
/T1_2 1 Tf
(unless)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define-macro)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(unless)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
('if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(not)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
('begin)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Alternatively, we could invoke )Tj
0.6 0 0 rg
/T1_2 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
( inside )Tj
0.6 0 0 rg
/T1_2 1 Tf
(unless)Tj
0 0 0 rg
/T1_0 1 Tf
('s definition:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define-macro)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(unless)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
('when)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(')Tj
0 0 0.502 rg
/T1_1 1 Tf
(not)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Macro expansions can refer to other macros.)Tj
ET
0 0 1 RG
1.511 w 10 M 0 j 0 J []0 d
45.428 158.272 m
416.283 158.272 l
S
0 0 1 rg
BT
/T1_3 1 Tf
17.9861 0 0 17.9861 45.4277 162.8042 Tm
(8.1 Specifying the expansion as a template)Tj
0 0 0 rg
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 126.3388 Tm
(A macro transformer takes some s-expressions and produces an s-expressio\
n that will be used as a )Tj
0 -1.205 TD
(form. Typically this output is a list. In our )Tj
0.6 0 0 rg
/T1_2 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
( example, the output list is created using)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
('if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
('begin)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\)\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-10.html \(2 \
of 7\)11/3/2006 8:50:00 PM)Tj
ET
EMC
endstream
endobj
966 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 747.007 Tm
(where )Tj
0 0 0.502 rg
/T1_1 1 Tf
(test)Tj
0 0 0 rg
/T1_0 1 Tf
( is bound to the macro's first subform, ie,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(<)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(pressure)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(60)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(branch)Tj
0 0 0 rg
/T1_0 1 Tf
( to the rest of the macro's subforms, ie,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\(\()Tj
0 0 0.502 rg
(open-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( \()Tj
0 0 0.502 rg
(attach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(depress)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(detach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(close-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Output lists can be quite complicated. It is easy to see that a more amb\
itious macro than )Tj
0.6 0 0 rg
/T1_2 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
T*
(could lead to quite an elaborate construction process for the output lis\
t. In such cases, it is more )Tj
T*
(convenient to specify the macro's output form as a )Tj
/T1_3 1 Tf
(template)Tj
/T1_0 1 Tf
(, with the macro arguments inserted at )Tj
T*
(appropriate places to fill out the template for each particular use of t\
he macro. Scheme provides the )Tj
/T1_3 1 Tf
T*
(backquote)Tj
/T1_0 1 Tf
( syntax to specify such templates. Thus the expression)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0 0 0.502 rg
(list)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
('IF)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0 0 0.502 rg
(cons)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
('BEGIN)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(is more conveniently written as)Tj
0.6 0 0 rg
/T1_2 1 Tf
2.5 -2.562 Td
(`)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(IF)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(test)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(BEGIN)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,@)Tj
0 0 0.502 rg
/T1_1 1 Tf
(branch)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(We can refashion the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(when)Tj
0 0 0 rg
/T1_0 1 Tf
( macro-definition as:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define-macro)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(when)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(test)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0 0.502 rg
(branch)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(`)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(IF)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(test)Tj
0.647 0.165 0.165 rg
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(BEGIN)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,@)Tj
0 0 0.502 rg
/T1_1 1 Tf
(branch)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(Note that the template format, unlike the earlier list construction, giv\
es immediate visual indication )Tj
0 -1.205 TD
(of the shape of the output list. The backquote \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(`)Tj
0 0 0 rg
/T1_0 1 Tf
(\) introduces a template for a list. The elements of )Tj
0 -1.205 TD
(the template appear )Tj
/T1_3 1 Tf
(verbatim)Tj
/T1_0 1 Tf
( in the resulting list, )Tj
/T1_3 1 Tf
(except)Tj
/T1_0 1 Tf
( when they are prefixed by a )Tj
/T1_3 1 Tf
(comma)Tj
/T1_0 1 Tf
( \(`)Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0 rg
/T1_0 1 Tf
('\) )Tj
0 -1.205 TD
(or a )Tj
/T1_3 1 Tf
(comma-splice)Tj
/T1_0 1 Tf
( \(`)Tj
0.6 0 0 rg
/T1_2 1 Tf
(,@)Tj
0 0 0 rg
/T1_0 1 Tf
('\). \(For the purpose of illustration, we have written the verbatim ele\
ments of )Tj
0 -1.2 TD
(the template in UPPER-CASE.\))Tj
0 -2.557 TD
(The comma and the comma-splice are used to insert the macro arguments in\
to the template. The )Tj
0 -1.2 TD
(comma inserts the result of evaluating its following expression. The com\
ma-splice inserts the result )Tj
T*
(of evaluating its following expression after )Tj
/T1_3 1 Tf
(splicing)Tj
/T1_0 1 Tf
( it, ie, it removes the outermost set of )Tj
T*
(parentheses. \(This implies that an expression introduced by comma-splic\
e )Tj
/T1_3 1 Tf
(must)Tj
/T1_0 1 Tf
( be a list.\))Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-10.html \(3 \
of 7\)11/3/2006 8:50:00 PM)Tj
ET
EMC
endstream
endobj
967 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 747.007 Tm
(In our example, given the values that )Tj
0 0 0.502 rg
/T1_1 1 Tf
(test)Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(branch)Tj
0 0 0 rg
/T1_0 1 Tf
( are bound to, it is easy to see that the )Tj
0 -1.2 TD
(template will expand to the required)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(IF)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(<)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(pressure)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\) )Tj
0 0.502 0 rg
(60)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(BEGIN)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0 0 0.502 rg
(open-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(attach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(depress)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(5)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(detach)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(floor-pump)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(close-valve)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(tube)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
ET
0 0 1 RG
1.511 w 10 M 0 j 0 J []0 d
45.428 562.322 m
426.283 562.322 l
S
0 0 1 rg
BT
/T1_3 1 Tf
17.9861 0 0 17.9861 45.4277 566.8543 Tm
(8.2 Avoiding variable capture inside macros)Tj
0 0 0 rg
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 530.3263 Tm
(A two-argument disjunction form, )Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
0 0 0 rg
/T1_0 1 Tf
(, could be defined as follows:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define-macro)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(`)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(y)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
0.6 0 0 rg
/T1_2 1 Tf
-2.5 -2.557 Td
(my-or)Tj
0 0 0 rg
/T1_0 1 Tf
( takes two arguments and returns the value of the first of them that is \
true \(ie, non-)Tj
0 0.502 0 rg
/T1_1 1 Tf
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
(\). In )Tj
T*
(particular, the second argument is evaluated only if the first turns out\
to be false.)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
T*
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
0 -2.4 TD
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(2)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(There is a problem with the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
0 0 0 rg
/T1_0 1 Tf
( macro as it is written. It re-evaluates the first argument if it is )Tj
0 -1.205 TD
(true: once in the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0 0 0 rg
/T1_0 1 Tf
(-test, and once again in the ``then'' branch. This can cause undesired b\
ehavior if )Tj
0 -1.2 TD
(the first argument were to contain side-effects, eg,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
T*
( \()Tj
0 0 0.502 rg
(display)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
("doing first argument")Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0 0 0.502 rg
(newline)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( )Tj
0 0.502 0 rg
(#t)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( )Tj
0 0.502 0 rg
(2)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(displays )Tj
0 0.502 0 rg
/T1_1 1 Tf
("doing first argument")Tj
0 0 0 rg
/T1_0 1 Tf
( twice.)Tj
0 -2.562 TD
(This can be avoided by storing the )Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0 0 0 rg
/T1_0 1 Tf
(-test result in a local variable:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define-macro)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-10.html \(4 \
of 7\)11/3/2006 8:50:00 PM)Tj
ET
EMC
endstream
endobj
968 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
0.647 0.165 0.165 rg
BT
/T1_1 1 Tf
12.99 0 0 12.99 77.9026 747.007 Tm
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(`)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0 0.502 rg
(temp)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(temp)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(temp)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(y)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(This is almost OK, except in the case where the second argument happens \
to contain the same )Tj
0 -1.205 TD
(identifier )Tj
0 0 0.502 rg
/T1_1 1 Tf
(temp)Tj
0 0 0 rg
/T1_0 1 Tf
( as used in the macro definition. Eg,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(temp)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(3)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -2.4 TD
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(temp)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0.502 0.502 rg
/T1_2 1 Tf
0 -1.2 TD
(=>)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0.502 0 rg
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(Surely it should be 3! The fiasco happens because the macro uses a local\
variable )Tj
0 0 0.502 rg
/T1_1 1 Tf
(temp)Tj
0 0 0 rg
/T1_0 1 Tf
( to store )Tj
0 -1.205 TD
(the value of the first argument \()Tj
0 0.502 0 rg
/T1_1 1 Tf
(#f)Tj
0 0 0 rg
/T1_0 1 Tf
(\) and the variable )Tj
0 0 0.502 rg
/T1_1 1 Tf
(temp)Tj
0 0 0 rg
/T1_0 1 Tf
( in the second argument got )Tj
/T1_3 1 Tf
(captured)Tj
/T1_0 1 Tf
( by )Tj
0 -1.205 TD
(the )Tj
0 0 0.502 rg
/T1_1 1 Tf
(temp)Tj
0 0 0 rg
/T1_0 1 Tf
( introduced by the macro.)Tj
0 -2.557 TD
(To avoid this, we need to be careful in choosing local variables inside \
macro definitions. We could )Tj
0 -1.2 TD
(choose outlandish names for such variables and hope fervently that nobod\
y else comes up with )Tj
T*
(them. Eg,)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define-macro)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(`)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0 0.502 rg
(+temp)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(+temp)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(+temp)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(y)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(This will work given the tacit understanding that )Tj
0 0 0.502 rg
/T1_1 1 Tf
(+temp)Tj
0 0 0 rg
/T1_0 1 Tf
( will not be used by code outside the )Tj
T*
(macro. This is of course an understanding waiting to be disillusioned.)Tj
0 -2.557 TD
(A more reliable, if verbose, approach is to use )Tj
/T1_3 1 Tf
(generated symbols)Tj
/T1_0 1 Tf
( that are guaranteed not to be )Tj
0 -1.205 TD
(obtainable by other means. The procedure )Tj
0 0 0.502 rg
/T1_1 1 Tf
(gensym)Tj
0 0 0 rg
/T1_0 1 Tf
( generates unique symbols each time it is )Tj
T*
(called. Here is a safe definition for )Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
0 0 0 rg
/T1_0 1 Tf
( using )Tj
0 0 0.502 rg
/T1_1 1 Tf
(gensym)Tj
0 0 0 rg
/T1_0 1 Tf
(:)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(define-macro)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(my-or)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0 0.502 rg
(temp)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(gensym)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
T*
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(`)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(temp)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(x)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_2 1 Tf
(if)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(temp)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(temp)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_2 1 Tf
(,)Tj
0 0 0.502 rg
/T1_1 1 Tf
(y)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(In the macros defined in this document, in order to be concise, we will \
not use the )Tj
0 0 0.502 rg
/T1_1 1 Tf
(gensym)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
T*
(approach. Instead, we will consider the point about variable capture as \
having been made, and go )Tj
0 -1.205 TD
(ahead with the less cluttered )Tj
0 0 0.502 rg
/T1_1 1 Tf
(+)Tj
0 0 0 rg
/T1_0 1 Tf
(-as-prefix approach. We will leave it to the astute reader to )Tj
0 -1.205 TD
(remember to convert these )Tj
0 0 0.502 rg
/T1_1 1 Tf
(+)Tj
0 0 0 rg
/T1_0 1 Tf
(-identifiers into gensyms in the manner outlined above.)Tj
ET
0 0 1 RG
1.511 w 10 M 0 j 0 J []0 d
45.428 46.615 m
80.429 46.615 l
S
0.6 0 0 RG
0.906 w
80.429 48.428 m
177.554 48.428 l
S
0 0 1 rg
BT
/T1_4 1 Tf
17.9861 0 0 17.9861 45.4277 51.1471 Tm
(8.3 )Tj
0.6 0 0 rg
/T1_2 1 Tf
(fluid-let)Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-10.html \(5 \
of 7\)11/3/2006 8:50:00 PM)Tj
ET
EMC
endstream
endobj
969 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 737.9191 Tm
(Here is a definition of a rather more complicated macro, )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( \(sec )Tj
ET
0 0 1 RG
0.655 w 10 M 0 j 0 J []0 d
438.426 735.955 m
454.663 735.955 l
S
0 0 1 rg
BT
/T1_0 1 Tf
12.99 0 0 12.99 438.4258 737.9191 Tm
(5.2)Tj
0 0 0 rg
(\). )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
-30.254 -1.348 Td
(specifies temporary bindings for a set of already existing lexical varia\
bles. Given a )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( )Tj
0 -1.2 TD
(expression such as)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(we want the expansion to be)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \(\()Tj
0 0 0.502 rg
(OLD-X)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(OLD-Y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \(\()Tj
0 0 0.502 rg
(RESULT)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(OLD-X)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(OLD-Y)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( )Tj
0 0 0.502 rg
(RESULT)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(where we want the identifiers )Tj
0 0 0.502 rg
/T1_2 1 Tf
(OLD-X)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_2 1 Tf
(OLD-Y)Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_2 1 Tf
(RESULT)Tj
0 0 0 rg
/T1_0 1 Tf
( to be symbols that will not capture )Tj
0 -1.205 TD
(variables in the expressions in the )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( form.)Tj
0 -2.562 TD
(Here is how we go about fashioning a )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( macro that implements what we want:)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(define-macro)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0 0.502 rg
(xexe)Tj
0.647 0.165 0.165 rg
( . )Tj
0 0 0.502 rg
(body)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \(\()Tj
0 0 0.502 rg
(xx)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(map)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(car)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(xexe)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(ee)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(map)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(cadr)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(xexe)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(old-xx)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(map)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0 0.502 rg
(ig)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(gensym)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 0 0.502 rg
(xexe)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0 0 0.502 rg
(result)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(gensym)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
T*
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(`)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(,)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0 0 0.502 rg
(map)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0 0.502 rg
(old-x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\) )Tj
0.6 0 0 rg
/T1_1 1 Tf
(`)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(,)Tj
0 0 0.502 rg
/T1_2 1 Tf
(old-x)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(,)Tj
0 0 0.502 rg
/T1_2 1 Tf
(x)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
T*
( )Tj
0 0 0.502 rg
(old-xx)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(xx)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(,@)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0 0 0.502 rg
(map)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(e)Tj
0.647 0.165 0.165 rg
(\))Tj
0 -1.2 TD
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(`)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(,)Tj
0 0 0.502 rg
/T1_2 1 Tf
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(,)Tj
0 0 0.502 rg
/T1_2 1 Tf
(e)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
0 -1.2 TD
( )Tj
0 0 0.502 rg
(xx)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(ee)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(,)Tj
0 0 0.502 rg
/T1_2 1 Tf
(result)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(,@)Tj
0 0 0.502 rg
/T1_2 1 Tf
(body)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
T*
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(,@)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0 0 0.502 rg
(map)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_1 1 Tf
(lambda)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( \()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(old-x)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(`)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\()Tj
0.6 0 0 rg
/T1_1 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(,)Tj
0 0 0.502 rg
/T1_2 1 Tf
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(,)Tj
0 0 0.502 rg
/T1_2 1 Tf
(old-x)Tj
0.647 0.165 0.165 rg
(\)\) )Tj
T*
( )Tj
0 0 0.502 rg
(xx)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(old-xx)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( )Tj
0.6 0 0 rg
/T1_1 1 Tf
(,)Tj
0 0 0.502 rg
/T1_2 1 Tf
(result)Tj
0.647 0.165 0.165 rg
(\)\)\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.557 Td
(The macro's arguments are: )Tj
0 0 0.502 rg
/T1_2 1 Tf
(xexe)Tj
0 0 0 rg
/T1_0 1 Tf
(, the list of variable/expression pairs introduced by the )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-)Tj
0 -1.205 TD
(let)Tj
0 0 0 rg
/T1_0 1 Tf
(; and )Tj
0 0 0.502 rg
/T1_2 1 Tf
(body)Tj
0 0 0 rg
/T1_0 1 Tf
(, the list of expressions in the body of the )Tj
0.6 0 0 rg
/T1_1 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
(. In our example, these are )Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
0 -1.205 TD
(\(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\)\))Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0.647 0.165 0.165 rg
/T1_2 1 Tf
(\(\()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
( respectively.)Tj
0 -2.562 TD
(The macro body introduces a bunch of local variables: )Tj
0 0 0.502 rg
/T1_2 1 Tf
(xx)Tj
0 0 0 rg
/T1_0 1 Tf
( is the list of the variables extracted from )Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-10.html \(6 \
of 7\)11/3/2006 8:50:00 PM)Tj
ET
EMC
endstream
endobj
970 0 obj<>stream
/Artifact <>BDC
0 0 0 rg
0 i
BT
/T1_0 1 Tf
0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 8.3507 0 0 8.3507 18 780.6628 Tm
(Teach Yourself Scheme in Fixnum Days )Tj
ET
EMC
/Article <>BDC
q
0 18 612 756 re
W* n
BT
/T1_0 1 Tf
12.99 0 0 12.99 45.4277 747.007 Tm
(the variable/expression pairs. )Tj
0 0 0.502 rg
/T1_1 1 Tf
(ee)Tj
0 0 0 rg
/T1_0 1 Tf
( is the corresponding list of expressions. )Tj
0 0 0.502 rg
/T1_1 1 Tf
(old-xx)Tj
0 0 0 rg
/T1_0 1 Tf
( is a list of fresh )Tj
0 -1.205 TD
(identifiers, one for each variable in )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xx)Tj
0 0 0 rg
/T1_0 1 Tf
(. These are used to store the )Tj
/T1_2 1 Tf
(incoming)Tj
/T1_0 1 Tf
( values of the )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xx)Tj
0 0 0 rg
/T1_0 1 Tf
(, so )Tj
0 -1.205 TD
(we can revert the )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xx)Tj
0 0 0 rg
/T1_0 1 Tf
( back to them once the )Tj
0.6 0 0 rg
/T1_3 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( body has been evaluated. )Tj
0 0 0.502 rg
/T1_1 1 Tf
(result)Tj
0 0 0 rg
/T1_0 1 Tf
( is )Tj
0 -1.205 TD
(another fresh identifier, used to store the value of the )Tj
0.6 0 0 rg
/T1_3 1 Tf
(fluid-let)Tj
0 0 0 rg
/T1_0 1 Tf
( body. In our example, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(xx)Tj
0 0 0 rg
/T1_0 1 Tf
( is )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
T*
(\()Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
( and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(ee)Tj
0 0 0 rg
/T1_0 1 Tf
( is )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
(. Depending on how your system implements )Tj
0 0 0.502 rg
/T1_1 1 Tf
(gensym)Tj
0 0 0 rg
/T1_0 1 Tf
(, )Tj
0 0 0.502 rg
/T1_1 1 Tf
(old-)Tj
0 -1.205 TD
(xx)Tj
0 0 0 rg
/T1_0 1 Tf
( might be the list )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0 0.502 rg
(GEN-63)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(GEN-64)Tj
0.647 0.165 0.165 rg
(\))Tj
0 0 0 rg
/T1_0 1 Tf
(, and )Tj
0 0 0.502 rg
/T1_1 1 Tf
(result)Tj
0 0 0 rg
/T1_0 1 Tf
( might be )Tj
0 0 0.502 rg
/T1_1 1 Tf
(GEN-65)Tj
0 0 0 rg
/T1_0 1 Tf
(.)Tj
0 -2.557 TD
(The output list is created by the macro for our given example looks like\
)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
2.5 -2.562 Td
(\()Tj
0.6 0 0 rg
/T1_3 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0 0.502 rg
(GEN-63)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
(\) \()Tj
0 0 0.502 rg
(GEN-64)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 -1.2 TD
( \()Tj
0.6 0 0 rg
/T1_3 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(9)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_3 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
(1)Tj
0.647 0.165 0.165 rg
(\)\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_3 1 Tf
(let)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \(\()Tj
0 0 0.502 rg
(GEN-65)Tj
0.647 0.165 0.165 rg
( \()Tj
0.6 0 0 rg
/T1_3 1 Tf
(begin)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( \()Tj
0 0 0.502 rg
(+)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
(\)\)\)\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_3 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(x)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(GEN-63)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( \()Tj
0.6 0 0 rg
/T1_3 1 Tf
(set!)Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
( )Tj
0 0 0.502 rg
(y)Tj
0.647 0.165 0.165 rg
( )Tj
0 0 0.502 rg
(GEN-64)Tj
0.647 0.165 0.165 rg
(\))Tj
T*
( )Tj
0 0 0.502 rg
(GEN-65)Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
-2.5 -2.552 Td
(which matches our requirement.)Tj
ET
0.5 0.5 0.5 rg
45.428 445.165 m
45.428 447.02 l
253.886 447.02 l
252.958 446.092 l
46.356 446.092 l
46.356 446.092 l
h
f
0.875 0.875 0.875 rg
253.886 447.02 m
253.886 445.165 l
45.428 445.165 l
46.356 446.092 l
252.958 446.092 l
252.958 446.092 l
h
f
0 0 1 RG
0.468 w 10 M 0 j 0 J []0 d
45.428 411.297 m
50.067 411.297 l
S
0 0 1 rg
BT
/T1_0 1 Tf
9.2785 0 0 9.2785 45.4277 412.7 Tm
(3)Tj
0 0 0 rg
12.99 0 0 12.99 50.067 406.4054 Tm
( MzScheme provides )Tj
0.6 0 0 rg
/T1_3 1 Tf
(define-macro)Tj
0 0 0 rg
/T1_0 1 Tf
( via the )Tj
/T1_1 1 Tf
(defmacro)Tj
/T1_0 1 Tf
( library. Use )Tj
0.647 0.165 0.165 rg
/T1_1 1 Tf
(\()Tj
0 0 0.502 rg
(require)Tj
0.647 0.165 0.165 rg
( \()Tj
0 0 0.502 rg
(lib)Tj
0.647 0.165 0.165 rg
( )Tj
0 0.502 0 rg
-0.357 -1.205 Td
("defmacro.ss")Tj
0.647 0.165 0.165 rg
(\)\))Tj
0 0 0 rg
/T1_0 1 Tf
( to load this library.)Tj
1 0 0 rg
/T1_2 1 Tf
19.26 -2.557 Td
([Go to )Tj
ET
0.592 w
333.143 355.761 m
354.083 355.761 l
S
0 0 1 rg
BT
/T1_2 1 Tf
12.99 0 0 12.99 333.1428 357.5378 Tm
(first)Tj
1 0 0 rg
(, )Tj
ET
360.578 355.761 m
405.315 355.761 l
S
0 0 1 rg
BT
/T1_2 1 Tf
12.99 0 0 12.99 360.5776 357.5378 Tm
(previous)Tj
1 0 0 rg
(, )Tj
ET
411.81 355.761 m
433.451 355.761 l
S
0 0 1 rg
BT
/T1_2 1 Tf
12.99 0 0 12.99 411.81 357.5378 Tm
(next)Tj
1 0 0 rg
( page; )Tj
ET
476.019 355.761 m
519.315 355.761 l
S
0 0 1 rg
BT
/T1_2 1 Tf
12.99 0 0 12.99 476.0193 357.5378 Tm
(contents)Tj
1 0 0 rg
(; )Tj
ET
533.383 355.761 m
561.519 355.761 l
S
0 0 1 rg
BT
/T1_2 1 Tf
12.99 0 0 12.99 533.3829 357.5378 Tm
(index)Tj
1 0 0 rg
(])Tj
ET
EMC
/Artifact <>BDC
Q
BT
/T1_0 1 Tf
8.3507 0 0 8.3507 18 7.6628 Tm
(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-10.html \(7 \
of 7\)11/3/2006 8:50:00 PM)Tj
ET
EMC
endstream
endobj
971 0 obj(Teach Yourself Scheme in Fixnum Days )
endobj
972 0 obj<>
endobj
973 0 obj(http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-10.html)
endobj
974 0 obj(;{'.¤¹Õ¢dÅ…—¬>E)
endobj
975 0 obj<>
endobj
976 0 obj<>
endobj
977 0 obj(–Â|—&