;;; 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
ibra...@gmail.com
--
You received this message because you are subscribed to the Google Groups "Lisp-br" group.
To post to this group, send email to lis...@googlegroups.com.
To unsubscribe from this group, send email to lisp-br+u...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/lisp-br?hl=en.
Valeu!
Em 10 de novembro de 2011 14:09, Jonas Oliveira Rodrigues
<jxo...@gmail.com> escreveu: