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.
