#lang racket
(define-syntax unpack
(syntax-rules ()
[(unpack) (begin (define x 1))]))
(unpack)
(+ x 1)
Por que estou recebendo um erro: x: unbound identifier in: x
?
Após definir a macro, espero que o código defina x apropriado sem erro? Não consigo entender isso, pode ser um problema com a sintaxe ou o compilador?
O expansor macro funciona intencionalmente dessa maneira para evitar interferir acidentalmente no
x
contexto externo.Uma maneira de informar ao expansor que você realmente deseja usar o x externo é passá-lo.
Outra maneira é usar
datum->syntax
para construir um identificadorx
no mesmo contexto em que o uso deunpack
aparece.