-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 03-01-12 20:15, Eli Barzilay wrote: > Two hours ago, Marijn wrote: >> Hi, >> >> for/hash is giving me a syntax-error, but the error is in >> macro-expanded code which is not shown by default and which is >> also seemingly inaccessible via the macro-stepper. The for/hash >> expression works outside my macro, so I guess it's my fault, but >> it would help if the syntax-error could be a bit more >> informative. The code: [...]
Thanks for taking the time to look into this. > 4. It's now easy to continue reducing it to the core of the > problem: > > (define-syntax with-variables (syntax-rules () ((_ (a ...)) > ((with-variables a) ...)) ((_ a) a))) (with-variables (let* ((y 1)) > 2)) > > Looks like you're doing a code walk (which is what makes me think > that this is too complex for whatever it is you're trying to do), > and treat some names in a special way. The problem is that > > ((with-variables a) ...) > > is creating a function application so the error is the same as > just entering `let*' to get its value -- and the only error that it > can throw at this point is a "bad syntax" with the whole > expression, which is just `let*'. It took me a while to understand what you're saying here, but if I am not mistaken you're saying that the result of the macro-expansion is a function-application with `let*' (or `for/hash') in the function position. Then when #%app looks that name up in the environment it doesn't find anything and thus complains about it. What I would then expect is that it complains about an undefined variable `let*'. > 5. And BTW, the reason it doesn't work is that the first expansion > gets to > > ((with-variables let*) (with-variables ((y 1))) (with-variables > 2)) > > and this form is not a macro -- so it's expanded as a function > call, > > (#%app ...same...) > > and the rest is obvious. It's not so obvious to me why this should degenerate into a function call; I'd say it depends on the result of (with-variables let*). Marijn -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk8EIngACgkQp/VmCx0OL2xmkQCgq6Zc2D3I8AwyFeHJra6d3fTh tOYAoJ++S7Gpq2XnLFOflL2qIfWgwXsR =9TxG -----END PGP SIGNATURE----- ____________________ Racket Users list: http://lists.racket-lang.org/users