|
18 | 18 | (lambda (form use-env mac-env)
|
19 | 19 | (make-syntactic-closure use-env '() (f form mac-env))))
|
20 | 20 |
|
21 |
| -(define (experimental:er-macro-transformer f) |
| 21 | +(define (er-macro-transformer f) |
22 | 22 | (lambda (form use-env mac-env)
|
23 | 23 | (define rename:list (list))
|
24 | 24 | (define (rename x)
|
|
35 | 35 | (begin (set! rename:list (alist-cons x (make-syntactic-closure mac-env '() x) rename:list))
|
36 | 36 | (cdar rename:list)))))
|
37 | 37 | (define (compare x y)
|
38 |
| - (free-identifier=? (if (syntactic-closure? x) x |
39 |
| - (make-syntactic-closure use-env '() x)) |
40 |
| - (if (syntactic-closure? y) y |
41 |
| - (make-syntactic-closure use-env '() y)))) |
| 38 | + (eqv? (if (syntactic-closure? x) x |
| 39 | + (make-syntactic-closure use-env '() x)) |
| 40 | + (if (syntactic-closure? y) y |
| 41 | + (make-syntactic-closure use-env '() y)))) |
42 | 42 | (f form rename compare)))
|
43 | 43 |
|
44 |
| -(define define-syntax define) |
45 |
| - |
46 |
| -(experimental:define-syntax import |
47 |
| - (experimental:er-macro-transformer |
| 44 | +(define-syntax import |
| 45 | + (er-macro-transformer |
48 | 46 | (lambda (form rename compare)
|
49 | 47 | (list (rename 'quote) (cons 'import (cdr form))))))
|
50 | 48 |
|
51 | 49 | ; ------------------------------------------------------------------------------
|
52 | 50 |
|
53 |
| -(experimental:define-syntax cond |
54 |
| - (experimental:er-macro-transformer |
| 51 | +(define-syntax cond |
| 52 | + (er-macro-transformer |
55 | 53 | (lambda (form rename compare)
|
56 | 54 | (if (null? (cdr form))
|
57 | 55 | (unspecified)
|
|
76 | 74 | (cons (rename 'cond) (cddr form))))))
|
77 | 75 | (cadr form))))))
|
78 | 76 |
|
79 |
| -(experimental:define-syntax and |
80 |
| - (experimental:er-macro-transformer |
| 77 | +(define-syntax and |
| 78 | + (er-macro-transformer |
81 | 79 | (lambda (form rename compare)
|
82 | 80 | (cond ((null? (cdr form)))
|
83 | 81 | ((null? (cddr form))
|
|
88 | 86 | (cddr form))
|
89 | 87 | #f))))))
|
90 | 88 |
|
91 |
| -(experimental:define-syntax or |
92 |
| - (experimental:er-macro-transformer |
| 89 | +(define-syntax or |
| 90 | + (er-macro-transformer |
93 | 91 | (lambda (form rename compare)
|
94 | 92 | (cond ((null? (cdr form)) #f)
|
95 | 93 | ((null? (cddr form))
|
|
125 | 123 | (car xs)))
|
126 | 124 | (reverse xs))))
|
127 | 125 |
|
128 |
| -(experimental:define-syntax quasiquote |
129 |
| - (experimental:er-macro-transformer |
| 126 | +(define-syntax quasiquote |
| 127 | + (er-macro-transformer |
130 | 128 | (lambda (form rename compare)
|
131 | 129 | (define (expand x depth)
|
132 | 130 | (cond ((pair? x)
|
|
170 | 168 |
|
171 | 169 | (define (not x) (if x #f #t))
|
172 | 170 |
|
173 |
| -(experimental:define-syntax when |
174 |
| - (experimental:er-macro-transformer |
| 171 | +(define-syntax when |
| 172 | + (er-macro-transformer |
175 | 173 | (lambda (form rename compare)
|
176 | 174 | `(,(rename 'if) ,(cadr form)
|
177 | 175 | (,(rename 'begin) ,@(cddr form))))))
|
178 | 176 |
|
179 |
| -(experimental:define-syntax unless |
180 |
| - (experimental:er-macro-transformer |
| 177 | +(define-syntax unless |
| 178 | + (er-macro-transformer |
181 | 179 | (lambda (form rename compare)
|
182 | 180 | `(,(rename 'if) (,(rename 'not) ,(cadr form))
|
183 | 181 | (,(rename 'begin) ,@(cddr form))))))
|
|
244 | 242 | #f)
|
245 | 243 | (any-2+ f (cons x xs))))
|
246 | 244 |
|
247 |
| -(experimental:define-syntax let |
248 |
| - (experimental:er-macro-transformer |
| 245 | +(define-syntax let |
| 246 | + (er-macro-transformer |
249 | 247 | (lambda (form rename compare)
|
250 | 248 | (if (identifier? (cadr form))
|
251 | 249 | `(,(rename 'letrec) ((,(cadr form)
|
|
255 | 253 | ,@(map cadr (cadr form)))))))
|
256 | 254 |
|
257 | 255 |
|
258 |
| -(experimental:define-syntax let* |
259 |
| - (experimental:er-macro-transformer |
| 256 | +(define-syntax let* |
| 257 | + (er-macro-transformer |
260 | 258 | (lambda (form rename compare)
|
261 | 259 | (if (null? (cadr form))
|
262 | 260 | `(,(rename 'let) () ,@(cddr form))
|
263 | 261 | `(,(rename 'let) (,(caadr form))
|
264 | 262 | (,(rename 'let*) ,(cdadr form)
|
265 | 263 | ,@(cddr form)))))))
|
266 | 264 |
|
267 |
| -(experimental:define-syntax letrec* |
268 |
| - (experimental:er-macro-transformer |
| 265 | +(define-syntax letrec* |
| 266 | + (er-macro-transformer |
269 | 267 | (lambda (form rename compare)
|
270 | 268 | `(,(rename 'let) ()
|
271 | 269 | ,@(map (lambda (x) (cons (rename 'define) x))
|
|
282 | 280 | (define (memq o x) (member o x eq?))
|
283 | 281 | (define (memv o x) (member o x eqv?))
|
284 | 282 |
|
285 |
| -(experimental:define-syntax case |
286 |
| - (experimental:er-macro-transformer |
| 283 | +(define-syntax case |
| 284 | + (er-macro-transformer |
287 | 285 | (lambda (form rename compare)
|
288 | 286 | (define (body xs)
|
289 | 287 | (cond ((null? xs) (rename 'result))
|
|
307 | 305 | `(,(rename 'let) ((,(rename 'result) ,(cadr form)))
|
308 | 306 | ,(each-clause (cddr form))))))
|
309 | 307 |
|
310 |
| -(experimental:define-syntax do |
311 |
| - (experimental:er-macro-transformer |
| 308 | +(define-syntax do |
| 309 | + (er-macro-transformer |
312 | 310 | (lambda (form rename compare)
|
313 | 311 | (let ((body `(,(rename 'begin) ,@(cdddr form)
|
314 | 312 | (,(rename 'rec) ,@(map (lambda (x)
|
|
660 | 658 | ; (apply consumer xs)))
|
661 | 659 |
|
662 | 660 | (define (call-with-values producer consumer)
|
663 |
| - ((lambda (vs) |
| 661 | + (let ((vs (producer))) |
664 | 662 | (if (values? vs)
|
665 | 663 | (apply consumer (cdr vs))
|
666 |
| - (consumer vs))) |
667 |
| - (producer))) |
| 664 | + (consumer vs)))) |
668 | 665 |
|
669 | 666 | ; ---- 6.11. Exceptions --------------------------------------------------------
|
670 | 667 |
|
|
0 commit comments