[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-users] help with implicit renaming macro

From: Alan Post
Subject: [Chicken-users] help with implicit renaming macro
Date: Mon, 11 Nov 2013 13:22:40 -0701

I have a routine with several input arguments and one
output argument.  I want to write a macro to wrap my
output argument such that I can pass the results of
my input arguments to my output argument.  (See below)

I have this working with an explicit renaming macro,
but this is overkill.  I could find myself capturing
variables other than my input arguments.

I'd like to rewrite this macro as an implicit renaming
macro, which seems to require that I traverse form and
insert (inject arg1) wherever I find arg1, and to do
the same for arg2.

I do not otherwise need to transform the symbolic
expression bound to output.  Is there some idiomatic
way to traverse a tree and perform a set of replacement
operations on matching leaves?  

  (define (doit #!key arg1 arg2 output)
    (output arg1: arg1 arg2: arg2))

  ; er-macro-transformer works, but it might capture
  ; more than arg1, arg2.  Can I rewrite this to
  ; explicitely inject arg1 and arg2?
  (define-syntax do-output
      (lambda (form rename compare?)
        `(lambda (#!key arg1 arg2)
           (list ,@(cdr form))))))

  >>> (doit arg1: "hello"
            arg2: "world"
            output: (do-output arg1 arg2))
  => ("hello world")

Thank you,

my personal website:

reply via email to

[Prev in Thread] Current Thread [Next in Thread]