[r6rs-discuss] [Formal] Trivial Enhancement of macros in v5.91: capture-syntax

AndrevanTonder andre at het.brown.edu
Tue Nov 28 09:28:43 EST 2006


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



More information about the r6rs-discuss mailing list