%PDF-1.4
%
1 0 obj
<< /S /GoTo /D (chapter.1) >>
endobj
4 0 obj
(A bit of history)
endobj
5 0 obj
<< /S /GoTo /D (section.1.1) >>
endobj
8 0 obj
(My target)
endobj
9 0 obj
<< /S /GoTo /D (section.1.2) >>
endobj
12 0 obj
(A bit of history: Fortran and Lisp)
endobj
13 0 obj
<< /S /GoTo /D (section.1.3) >>
endobj
16 0 obj
(The algorithmic language Scheme)
endobj
17 0 obj
<< /S /GoTo /D (chapter.2) >>
endobj
20 0 obj
(About Scheme implementations)
endobj
21 0 obj
<< /S /GoTo /D (section.2.1) >>
endobj
24 0 obj
(About Scheme implementations)
endobj
25 0 obj
<< /S /GoTo /D (section.2.2) >>
endobj
28 0 obj
(About the library problem)
endobj
29 0 obj
<< /S /GoTo /D (section.2.3) >>
endobj
32 0 obj
(Additional difficulties)
endobj
33 0 obj
<< /S /GoTo /D (chapter.3) >>
endobj
36 0 obj
(Of parentheses and indentation)
endobj
37 0 obj
<< /S /GoTo /D (section.3.1) >>
endobj
40 0 obj
(Of parens and indentation)
endobj
41 0 obj
<< /S /GoTo /D (section.3.2) >>
endobj
44 0 obj
(About the prefix syntax)
endobj
45 0 obj
<< /S /GoTo /D (chapter.4) >>
endobj
48 0 obj
(Scheme bibliography \(and a first program\))
endobj
49 0 obj
<< /S /GoTo /D (section.4.1) >>
endobj
52 0 obj
(Scheme resources for beginners)
endobj
53 0 obj
<< /S /GoTo /D (section.4.2) >>
endobj
56 0 obj
(A simple Scheme program)
endobj
57 0 obj
<< /S /GoTo /D (chapter.5) >>
endobj
60 0 obj
(About tail call optimization \(and the module system\))
endobj
61 0 obj
<< /S /GoTo /D (section.5.1) >>
endobj
64 0 obj
(There are no for loops in Scheme)
endobj
65 0 obj
<< /S /GoTo /D (section.5.2) >>
endobj
68 0 obj
(There is no portable module system)
endobj
69 0 obj
<< /S /GoTo /D (section.5.3) >>
endobj
72 0 obj
(A simple benchmark)
endobj
73 0 obj
<< /S /GoTo /D (chapter.6) >>
endobj
76 0 obj
(The danger of benchmarks)
endobj
77 0 obj
<< /S /GoTo /D (section.6.1) >>
endobj
80 0 obj
(Beware of wasted cycles)
endobj
81 0 obj
<< /S /GoTo /D (section.6.2) >>
endobj
84 0 obj
(Beware of cheats)
endobj
85 0 obj
<< /S /GoTo /D (section.6.3) >>
endobj
88 0 obj
(Beware of naive optimization)
endobj
89 0 obj
<< /S /GoTo /D (section.6.4) >>
endobj
92 0 obj
(Recursion vs iteration)
endobj
93 0 obj
<< /S /GoTo /D (chapter.7) >>
endobj
96 0 obj
(Symbols and lists)
endobj
97 0 obj
<< /S /GoTo /D (section.7.1) >>
endobj
100 0 obj
(Symbols)
endobj
101 0 obj
<< /S /GoTo /D (section.7.2) >>
endobj
104 0 obj
(Lists)
endobj
105 0 obj
<< /S /GoTo /D (section.7.3) >>
endobj
108 0 obj
(Some example)
endobj
109 0 obj
<< /S /GoTo /D (chapter.8) >>
endobj
112 0 obj
(Quoting and quasi-quoting)
endobj
113 0 obj
<< /S /GoTo /D (section.8.1) >>
endobj
116 0 obj
(Quoting)
endobj
117 0 obj
<< /S /GoTo /D (section.8.2) >>
endobj
120 0 obj
(Quasi-quoting)
endobj
121 0 obj
<< /S /GoTo /D (section.8.3) >>
endobj
124 0 obj
(Programs writing programs)
endobj
125 0 obj
<< /S /GoTo /D (section.8.4) >>
endobj
128 0 obj
(Appendix: solution of the exercises)
endobj
129 0 obj
<< /S /GoTo /D (chapter.9) >>
endobj
132 0 obj
(Introduction to \(sweet-\)macros)
endobj
133 0 obj
<< /S /GoTo /D (section.9.1) >>
endobj
136 0 obj
(A minimal introduction to Scheme macros)
endobj
137 0 obj
<< /S /GoTo /D (section.9.2) >>
endobj
140 0 obj
(Which macrology should I teach?)
endobj
141 0 obj
<< /S /GoTo /D (section.9.3) >>
endobj
144 0 obj
(Enter sweet-macros)
endobj
145 0 obj
<< /S /GoTo /D (section.9.4) >>
endobj
148 0 obj
(An example: multi-define)
endobj
149 0 obj
<< /S /GoTo /D (chapter.10) >>
endobj
152 0 obj
(Features of \(sweet-\)macros)
endobj
153 0 obj
<< /S /GoTo /D (section.10.1) >>
endobj
156 0 obj
(syntax-match and introspection features of sweet-macros)
endobj
157 0 obj
<< /S /GoTo /D (section.10.2) >>
endobj
160 0 obj
(A couple of common mistakes)
endobj
161 0 obj
<< /S /GoTo /D (section.10.3) >>
endobj
164 0 obj
(Guarded patterns)
endobj
165 0 obj
<< /S /GoTo /D (section.10.4) >>
endobj
168 0 obj
(Literal identifiers)
endobj
169 0 obj
<< /S /GoTo /D (chapter.11) >>
endobj
172 0 obj
(The multiple evaluation problem \(and easy-test\))
endobj
173 0 obj
<< /S /GoTo /D (section.11.1) >>
endobj
176 0 obj
(The problem of multiple evaluation)
endobj
177 0 obj
<< /S /GoTo /D (section.11.2) >>
endobj
180 0 obj
(Taking advantage of multiple evaluation)
endobj
181 0 obj
<< /S /GoTo /D (section.11.3) >>
endobj
184 0 obj
(A micro-framework for unit tests)
endobj
185 0 obj
<< /S /GoTo /D (chapter.12) >>
endobj
188 0 obj
(Are macros really useful?)
endobj
189 0 obj
<< /S /GoTo /D (section.12.1) >>
endobj
192 0 obj
(Are macros ``just syntactic sugar''?)
endobj
193 0 obj
<< /S /GoTo /D (section.12.2) >>
endobj
196 0 obj
(About the usefulness of macros for application programmers)
endobj
197 0 obj
<< /S /GoTo /D (section.12.3) >>
endobj
200 0 obj
(Appendix: a Pythonic for loop)
endobj
201 0 obj
<< /S /GoTo /D (chapter.13) >>
endobj
204 0 obj
(Micro-introduction to functional programming)
endobj
205 0 obj
<< /S /GoTo /D (section.13.1) >>
endobj
208 0 obj
(A minimal introduction to functional programming)
endobj
209 0 obj
<< /S /GoTo /D (section.13.2) >>
endobj
212 0 obj
(Functional data structures: pairs and lists)
endobj
213 0 obj
<< /S /GoTo /D (section.13.3) >>
endobj
216 0 obj
(Functional update)
endobj
217 0 obj
<< /S /GoTo /D (chapter.14) >>
endobj
220 0 obj
(Currying, partial application, and fold)
endobj
221 0 obj
<< /S /GoTo /D (section.14.1) >>
endobj
224 0 obj
(Higher order functions and curried functions)
endobj
225 0 obj
<< /S /GoTo /D (section.14.2) >>
endobj
228 0 obj
(Partial application: cut and cute)
endobj
229 0 obj
<< /S /GoTo /D (section.14.3) >>
endobj
232 0 obj
(fold-left and fold-right)
endobj
233 0 obj
<< /S /GoTo /D (chapter.15) >>
endobj
236 0 obj
(List destructuring)
endobj
237 0 obj
<< /S /GoTo /D (section.15.1) >>
endobj
240 0 obj
(About pattern matching)
endobj
241 0 obj
<< /S /GoTo /D (section.15.2) >>
endobj
244 0 obj
(A list destructuring binding form \(let+\))
endobj
245 0 obj
<< /S /GoTo /D (chapter.16) >>
endobj
248 0 obj
(Multiple values \(and opt-lambda\))
endobj
249 0 obj
<< /S /GoTo /D (section.16.1) >>
endobj
252 0 obj
(list destructuring versus let-values)
endobj
253 0 obj
<< /S /GoTo /D (section.16.2) >>
endobj
256 0 obj
(Variadic functions from unary functions)
endobj
257 0 obj
<< /S /GoTo /D (section.16.3) >>
endobj
260 0 obj
(Further examples of destructuring: opt-lambda)
endobj
261 0 obj
<< /S /GoTo /D (chapter.17) >>
endobj
264 0 obj
(List comprehension)
endobj
265 0 obj
<< /S /GoTo /D (section.17.1) >>
endobj
268 0 obj
(The APS library)
endobj
269 0 obj
<< /S /GoTo /D (section.17.2) >>
endobj
272 0 obj
(Implementing list comprehension)
endobj
273 0 obj
<< /S /GoTo /D (section.17.3) >>
endobj
276 0 obj
(A tricky point)
endobj
277 0 obj
<< /S /GoTo /D (chapter.18) >>
endobj
280 0 obj
(Streams)
endobj
281 0 obj
<< /S /GoTo /D (section.18.1) >>
endobj
284 0 obj
(The eight queens puzzle)
endobj
285 0 obj
<< /S /GoTo /D (section.18.2) >>
endobj
288 0 obj
(Iterators and streams)
endobj
289 0 obj
<< /S /GoTo /D (section.18.3) >>
endobj
292 0 obj
(Lazyness is a virtue)
endobj
293 0 obj
<< /S /GoTo /D (chapter.19) >>
endobj
296 0 obj
(The R6RS module system)
endobj
297 0 obj
<< /S /GoTo /D (section.19.1) >>
endobj
300 0 obj
(Modules are not first class objects)
endobj
301 0 obj
<< /S /GoTo /D (section.19.2) >>
endobj
304 0 obj
(Compiling Scheme modules vs compiling Python modules)
endobj
305 0 obj
<< /S /GoTo /D (section.19.3) >>
endobj
308 0 obj
(Compiling is not the same than executing)
endobj
309 0 obj
<< /S /GoTo /D (chapter.20) >>
endobj
312 0 obj
(The compilation and evaluation strategy of Scheme programs)
endobj
313 0 obj
<< /S /GoTo /D (section.20.1) >>
endobj
316 0 obj
(Interpreter semantics vs compiler semantics)
endobj
317 0 obj
<< /S /GoTo /D (section.20.2) >>
endobj
320 0 obj
(Macros and helper functions)
endobj
321 0 obj
<< /S /GoTo /D (section.20.3) >>
endobj
324 0 obj
(A note about incremental compilers and interpreters)
endobj
325 0 obj
<< /S /GoTo /D (section.20.4) >>
endobj
328 0 obj
(Discussion)
endobj
329 0 obj
<< /S /GoTo /D (chapter.21) >>
endobj
332 0 obj
(The different meanings of phase separation)
endobj
333 0 obj
<< /S /GoTo /D (section.21.1) >>
endobj
336 0 obj
(Compile-time, run-time and optimization-time)
endobj
337 0 obj
<< /S /GoTo /D (section.21.2) >>
endobj
340 0 obj
(Strong vs weak phase separation)
endobj
341 0 obj
<< /S /GoTo /D (section.21.3) >>
endobj
344 0 obj
(A note about politics)
endobj
345 0 obj
<< /S /GoTo /D (chapter.22) >>
endobj
348 0 obj
(The Dark Tower of Meta-levels)
endobj
349 0 obj
<< /S /GoTo /D (section.22.1) >>
endobj
352 0 obj
(An easy-looking macro with a deep portability issue)
endobj
353 0 obj
<< /S /GoTo /D (section.22.2) >>
endobj
356 0 obj
(Negative meta-levels)
endobj
357 0 obj
<< /S /GoTo /D (section.22.3) >>
endobj
360 0 obj
(Meta-levels greater than one)
endobj
361 0 obj
<< /S /GoTo /D (section.22.4) >>
endobj
364 0 obj
(Discussion)
endobj
365 0 obj
<< /S /GoTo /D (chapter.23) >>
endobj
368 0 obj
(Separate compilation and import semantics)
endobj
369 0 obj
<< /S /GoTo /D (section.23.1) >>
endobj
372 0 obj
(The mysterious import semantics)
endobj
373 0 obj
<< /S /GoTo /D (section.23.2) >>
endobj
376 0 obj
(More implementation-dependent details)
endobj
377 0 obj
<< /S /GoTo /D (chapter.24) >>
endobj
380 0 obj
(Mutating variables across modules)
endobj
381 0 obj
<< /S /GoTo /D (section.24.1) >>
endobj
384 0 obj
(Mutating internal variables)
endobj
385 0 obj
<< /S /GoTo /D (section.24.2) >>
endobj
388 0 obj
(Mutating variables across phases)
endobj
389 0 obj
<< /S /GoTo /D (section.24.3) >>
endobj
392 0 obj
(Cross-phase side effects and separate compilation)
endobj
393 0 obj
<< /S /GoTo /D (section.24.4) >>
endobj
396 0 obj
(Conclusion)
endobj
397 0 obj
<< /S /GoTo /D (chapter.25) >>
endobj
400 0 obj
(Back to macros)
endobj
401 0 obj
<< /S /GoTo /D (section.25.1) >>
endobj
404 0 obj
(Writing your own programming language)
endobj
405 0 obj
<< /S /GoTo /D (section.25.2) >>
endobj
408 0 obj
(Recursive macros with accumulators)
endobj
409 0 obj
<< /S /GoTo /D (section.25.3) >>
endobj
412 0 obj
(A trick to avoid auxiliary macros)
endobj
413 0 obj
<< /S /GoTo /D (chapter.26) >>
endobj
416 0 obj
(Macros taking macros as arguments)
endobj
417 0 obj
<< /S /GoTo /D (section.26.1) >>
endobj
420 0 obj
(Scheme as an unfinished language)
endobj
421 0 obj
<< /S /GoTo /D (section.26.2) >>
endobj
424 0 obj
(Two second order macros to reduce parentheses)
endobj
425 0 obj
<< /S /GoTo /D (section.26.3) >>
endobj
428 0 obj
(The case for parentheses)
endobj
429 0 obj
<< /S /GoTo /D (chapter.27) >>
endobj
432 0 obj
(Syntax objects)
endobj
433 0 obj
<< /S /GoTo /D (section.27.1) >>
endobj
436 0 obj
(What syntax-match really is)
endobj
437 0 obj
<< /S /GoTo /D (section.27.2) >>
endobj
440 0 obj
(What macros really are)
endobj
441 0 obj
<< /S /GoTo /D (section.27.3) >>
endobj
444 0 obj
(A nicer syntax for association lists)
endobj
445 0 obj
<< /S /GoTo /D (chapter.28) >>
endobj
448 0 obj
(Hygienic macros)
endobj
449 0 obj
<< /S /GoTo /D (section.28.1) >>
endobj
452 0 obj
(syntax-match vs syntax-rules)
endobj
453 0 obj
<< /S /GoTo /D (section.28.2) >>
endobj
456 0 obj
(syntax-match vs syntax-case)
endobj
457 0 obj
<< /S /GoTo /D (section.28.3) >>
endobj
460 0 obj
(syntax-match versus define-macro)
endobj
461 0 obj
<< /S /GoTo /D (section.28.4) >>
endobj
464 0 obj
(The hygiene problem)
endobj
465 0 obj
<< /S /GoTo /D (chapter.29) >>
endobj
468 0 obj
(Breaking hygiene)
endobj
469 0 obj
<< /S /GoTo /D (section.29.1) >>
endobj
472 0 obj
(datum->syntax revisited)
endobj
473 0 obj
<< /S /GoTo /D (section.29.2) >>
endobj
476 0 obj
(Playing with the lexical context)
endobj
477 0 obj
<< /S /GoTo /D (section.29.3) >>
endobj
480 0 obj
(Hygienic vs non-hygienic macro systems)
endobj
481 0 obj
<< /S /GoTo /D (chapter.30) >>
endobj
484 0 obj
(Comparing identifiers)
endobj
485 0 obj
<< /S /GoTo /D (section.30.1) >>
endobj
488 0 obj
(symbol-identifier=?)
endobj
489 0 obj
<< /S /GoTo /D (section.30.2) >>
endobj
492 0 obj
(bound-identifier=?)
endobj
493 0 obj
<< /S /GoTo /D (section.30.3) >>
endobj
496 0 obj
(free-identifier=?)
endobj
497 0 obj
<< /S /GoTo /D (section.30.4) >>
endobj
500 0 obj
(Literal identifiers and auxiliary syntax)
endobj
501 0 obj
<< /S /GoTo /D (chapter.31) >>
endobj
504 0 obj
(Indices and tables)
endobj
505 0 obj
<< /S /GoTo /D [506 0 R /Fit ] >>
endobj
508 0 obj <<
/Length 316
/Filter /FlateDecode
>>
stream
xڽPKK@W13l
QJ1ٶ<ލYlѻy0߃`w'`0PuKD;8'z1N2Tf2~yѾoa=~SEty+ Dc
CT`Hcf,5bT_ ݰk9q?qs'bBI*TxqxWU]ڲ;oAj-d'P4"QKr9.5^Nfg}ۀ^5]38Xb&8A6c)qxvW3]̍ O7ET5
endstream
endobj
506 0 obj <<
/Type /Page
/Contents 508 0 R
/Resources 507 0 R
/MediaBox [0 0 595.276 841.89]
/Parent 514 0 R
>> endobj
509 0 obj <<
/D [506 0 R /XYZ 71 807.752 null]
>> endobj
510 0 obj <<
/D [506 0 R /XYZ 72 769.89 null]
>> endobj
507 0 obj <<
/Font << /F40 511 0 R /F41 512 0 R /F43 513 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
517 0 obj <<
/Length 19
/Filter /FlateDecode
>>
stream
x3PHW0Pp2A
|