[R6RS] Fresh syntax
dyb at cs.indiana.edu
dyb at cs.indiana.edu
Wed May 10 12:00:49 EDT 2006
> Yes, that works (and I confess I didn't think of it, because I was too
> busy reasoning about mark cancellation...)
I might have the same problem with syntax-local-introduce and
make-syntax-introducer and company, but fresh-syntax is straightforward to
me.
> However, what I was aiming for (and what I vaguely had in mind when I
> originally suggested FRESH-SYNTAX) was a mechanism which would allow one
> to write syntax-processing procedures without needing to explicitly
> generate all introduced identifiers.
I could also have written:
(define-syntax main
(lambda (stx)
(let ((make-swap
(lambda (x y)
(with-syntax ((x x) (y y))
(fresh-syntax
(let ((t x))
(set! x y)
(set! y t)))))))
(syntax-case stx ()
((_)
(with-syntax ((swap (make-swap (syntax s) (syntax t))))
(syntax
(let ((s 1) (t 2))
swap
(list s t)))))))))
so that all introduced identifiers are fresh. In this example, the effect
is the same, but in general, none of the identifiers, including t,
introduced by the fresh-syntax form would conflict with bindings or
references introduced by the body of the transformer or its other helpers.
Kent
More information about the R6RS
mailing list