Putz! Nem acredito em como não pensei nisso antes!

Valeu!

Em 10 de novembro de 2011 14:09, Jonas Oliveira Rodrigues
<[email protected]> escreveu:
> Olá!
> exporte também o símbolo "magic-number", ou no defpackage:
>  (defpackage :foo
>     (:use :common-lisp)
>     (:export :deffoo magic-number))
> ou solto no código mesmo:
> (export 'magic-number)
> (defmacro deffoo (&rest body)
>  `(let ((magic-number 42)) ;; <---- Captura INTENCIONAL!
>     ,@body))
> []'s
>
> 2011/11/10 Rafael Ibraim <[email protected]>
>>
>> Pessoal, estou uma pequena dúvida, por favor dêem uma olhada no exemplo
>> abaixo:
>>
>>  ;;; Macro na package FOO
>>  (defpackage :foo
>>  (:use :common-lisp)
>>  (:export :deffoo))
>>
>>  (in-package :foo)
>>
>>  (defmacro deffoo (&rest body)
>>  `(let ((magic-number 42)) ;; <---- Captura INTENCIONAL!
>>     ,@body))
>>
>>  E agora, ao usar a macro na package BAR....
>>  (defpackage :bar
>>  (:use common-lisp :foo))
>>
>>  (deffoo
>>  (+ magic-number 1)) ;; <---- Erro: MAGIC-NUMBER não existe!
>>
>>  A expansão(macroexpand-1) de deffoo na verdade é:
>>  (LET ((FOO::MAGIC-NUMBER 42))
>>       (+ MAGIC-NUMBER 1))
>>
>>  Claramente, são símbolos em packages diferentes e é isso que gera o erro.
>>  Minha dúvida é: qual é a melhor maneira de se resolver este tipo de
>> situação?
>>  Atualmente eu altero minha macro para:
>>
>>  (defmacro deffoo (&rest body)
>>  `(let (((intern (symbol-name 'magic-number)) 42))
>>     ,@body))
>>
>>  E tudo funciona perfeitamente, mas acredito que exista uma solução
>>  mais prática. Alguém tem alguma idéia?
>>
>> --
>> Rafael Ibraim
>> Oracle Database SQL Expert
>> Linux User Number: #537480
>> [email protected]
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Lisp-br" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/lisp-br?hl=en.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Lisp-br" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/lisp-br?hl=en.
>



-- 
Rafael Ibraim
Oracle Database SQL Expert
Linux User Number: #537480
[email protected]

-- 
You received this message because you are subscribed to the Google Groups 
"Lisp-br" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/lisp-br?hl=en.

Responder a