From: "andrew cooke" <andrew@...>
Date: Sun, 19 Aug 2007 08:57:04 -0400 (CLT)
I may be misunderstanding hygienic macros here, but as far as I can tell I
am getting variable capture.
(define-syntax bad
(syntax-rules ()
((_ (arg1 ...) (arg2 ...))
(receive (a b c) (values arg1 ...)
(newline)
(write (list arg2 ...))))))
(receive (a b c) (values 1 2 3) (bad (7 8 9) (a b c)))
This displays (7 8 9) when arg2 should be (1 2 3) (the value of a b c in
the calling code, not the value in "bad").
For comparison, similar code with "let" instead of "receive" works as
expected:
(define-syntax bad2
(syntax-rules ()
((_ arg1 arg2)
(let ((a arg1))
(newline)
(write arg2)))))
(let ((a 1)) (bad2 7 a))
This displays "1".
Gambit Version 4.0 beta 22, on Suse linux 10.2, amd64.
Andrew