[r6rs-discuss] [Formal] Trivial Enhancement of macros in v5.91: capture-syntax
On Tue, 28 Nov 2006, Abdulaziz Ghuloum wrote:
> One more question if you don't mind, would the following work? (maybe
> you don't want it, but I was re-factoring it and realized I didn't want
> to regenerate the transformers every time you enter a new [un]trace-region.
> I'm curious.)
>
> ...
This seems to be an example where negative phases are unavoidable in phased
models. Here is a working version, tested in my implementation:
(library print
(export print-args)
(import r6rs)
(define print-args
(lambda (fml* act*)
(display "Lambda ")
(display fml*)
(display " : ")
(display act*)
(newline))))
(library tracers-helpers
(export trace-transformer untrace-transformer)
(import (for r6rs (meta -1) run)
(for print (meta -1)))
(define trace-transformer
(lambda (stx)
(syntax-case stx ()
[(_ fml* b b* ...)
;; This lives at level -1 w.r.t tracer-helpers:
#'(lambda act*
(print-args 'fml* act*)
(apply (lambda fml* b b* ...) act*))])))
(define untrace-transformer
(lambda (stx)
(syntax-case stx ()
[(_ fml* b b* ...)
#'(lambda fml* b b* ...)]))))
(library tracers
(export trace-region untrace-region)
(import r6rs (for tracers-helpers expand))
(define-syntax trace-region
(lambda (x)
(syntax-case x ()
[(kwd b b* ...)
(with-syntax ([L (datum->syntax #'kwd 'lambda)])
#'(let-syntax ([L trace-transformer])
b b* ...))])))
(define-syntax untrace-region
(lambda (x)
(syntax-case x ()
[(kwd b b* ...)
(with-syntax ([L (datum->syntax #'kwd 'lambda)])
#'(let-syntax ([L untrace-transformer])
b b* ...))]))))
Cheers
Andre
Received on Tue Nov 28 2006 - 09:28:43 UTC
This archive was generated by hypermail 2.3.0
: Wed Oct 23 2024 - 09:15:00 UTC