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

From: AndrevanTonder <andre>
Date: Tue Nov 28 09:33:24 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
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