[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-users] Strange problems with args egg
From: |
John Cowan |
Subject: |
Re: [Chicken-users] Strange problems with args egg |
Date: |
Sat, 3 Aug 2013 12:06:05 -0400 |
User-agent: |
Mutt/1.5.20 (2009-06-14) |
Jonathan Chan scripsit:
> Here is the smallest amount of args-using Chicken that will cause the
> problem:
>
> (define-syntax test
> (syntax-rules ()
> ((test)
> (begin
> (define opts (list (args:make-option (h help) #:none "display
> this text" (print "foo"))))
> (write (args:parse (command-line-arguments) opts))))))
>
[...]
> The strange thing is that h and help seem to have turned into ("h390"
> "help391"), causing problems.
This is not a Chicken-specific problem, but a general problem
with non-hygienic macros. You are using the non-hygienic macro
"args:make-option" within a hygienic macro. The syntax-rules transformer
doesn't know that "h" and "help" are being used literally here (because
it cannot tell what args:make-option does), so it systematically renames
them to avoid collisions.
> Is there something I need to change to fix the problem? Sorry for many
> misunderstandings.
You can rewrite test as a non-hygienic (explicit renaming or implicit
renaming) macro.
--
If I read "upcoming" in [the newspaper] John Cowan
once more, I will be downcoming http://www.ccil.org/~cowan
and somebody will be outgoing. address@hidden