Next: stdlib syntax-case derived, Previous: stdlib syntax-case conversion, Up: stdlib syntax-case [Index]
Transformers can introduce a fixed number of identifiers into their
output simply by naming each identifier. In some cases, however, the
number of identifiers to be introduced depends upon some characteristic
of the input expression. A straightforward definition of letrec,
for example, requires as many temporary identifiers as there are binding
pairs in the input expression. The procedure
generate-temporaries is used to construct lists of temporary
identifiers.
l must be be a list or syntax object representing a list–structured form; its contents are not important.
The number of temporaries generated is the number of elements in l. Each temporary is guaranteed to be unique, i.e., different from all other identifiers.
A definition of letrec equivalent to the one using
syntax-rules given in scheme derived is shown below.
(define-syntax letrec
(lambda (x)
(syntax-case x ()
((_ ((i e) ...) b1 b2 ...)
(with-syntax (((T ...)
(generate-temporaries #'(i ...))))
#'(let ((i #f) ...)
(let ((T e) ...)
(set! i T) ...
(let () b1 b2 ...))))))))
This version uses generate-temporaries instead of recursively
defined helper to generate the necessary temporaries.