Lisp:宏/函数定义中的包前缀存在问题

Lisp:宏/函数定义中的包前缀存在问题,lisp,common-lisp,Lisp,Common Lisp,我想创建一个包含包前缀符号的宏或函数。只有在已经定义了这些包的情况下,这才是可能的。为什么?只要在调用宏/函数时我已经定义了包,那么在定义宏/函数时如果它们未定义,为什么会出现问题 我想这样做的原因是,我想在我的init文件中有一些便利函数,用于开始停止我在不同项目包中开发的东西,但我不想加载所有项目,只是为了能够定义便利函数,因为我一次只开发一个项目。源代码在评估之前由Lisp阅读器读取。如果尚未定义包,则读取器无法插入符号。源代码在求值之前由Lisp读取器读取,请参阅。如果包还没有定义,读者

我想创建一个包含包前缀符号的宏或函数。只有在已经定义了这些包的情况下,这才是可能的。为什么?只要在调用宏/函数时我已经定义了包,那么在定义宏/函数时如果它们未定义,为什么会出现问题



我想这样做的原因是,我想在我的init文件中有一些便利函数,用于开始停止我在不同项目包中开发的东西,但我不想加载所有项目,只是为了能够定义便利函数,因为我一次只开发一个项目。

源代码在评估之前由Lisp阅读器读取。如果尚未定义包,则读取器无法插入符号。

源代码在求值之前由Lisp读取器读取,请参阅。如果包还没有定义,读者就不能插入符号。

也许你应该给出一个你想做什么的例子,我们可以告诉你如何解决它。符号需要在已定义的包中或不在包中。我们可以做一些高级的选择,但只有当我们了解您的用例时,才有必要告诉您。我在问题中补充了我需要这个的原因。现在我想在这个案例中,Xach和Rainer应该平均地分享公认的答案。哈奇回答了上半场的问题,也就是最初的全部问题,然后雷纳帮我找到了问题根源的解决方案。所以,我扔了一枚硬币:如果雷纳需要分数,那就放弃吧!也许你应该举例说明你想做什么,我们可以告诉你如何解决它。符号需要在已定义的包中或不在包中。我们可以做一些高级的选择,但只有当我们了解您的用例时,才有必要告诉您。我在问题中补充了我需要这个的原因。现在我想在这个案例中,Xach和Rainer应该平均地分享公认的答案。哈奇回答了上半场的问题,也就是最初的全部问题,然后雷纳帮我找到了问题根源的解决方案。所以,我扔了一枚硬币:如果雷纳需要分数,那就放弃吧!我有没有办法拥有这个功能?以某种方式延迟前缀符号的插入,直到定义了包?这一切的原因是,我想在我的init文件中有一些便利函数,用于开始停止我在不同包中开发的东西,但我不想加载所有的项目,只是为了能够定义便利函数,因为我一次只开发一个项目…@paralife:请看我的另一个答案一个选项:不要在init文件中定义那些便利函数,在依赖于主要内容的新项目中定义它们,例如,paralife hunchentoot可能是一个项目,其中包含的启动/停止功能取决于hunchentoot。@paralife:符号的插入通常发生在读取时,当符号从“外部表示”转换为符号时。如果您所说的符号所属的软件包不存在,则无法对其进行扣押。Rainer使用FIND-SYMBOL的代码将符号的查找延迟到运行时,并且出于很少运行、性能不关键的方便函数的特定目的,这是完全合理的,但可能不应该在一个紧密的内部循环中使用。我有没有办法拥有这个功能?以某种方式延迟前缀符号的插入,直到定义了包?这一切的原因是,我想在我的init文件中有一些便利函数,用于开始停止我在不同包中开发的东西,但我不想加载所有的项目,只是为了能够定义便利函数,因为我一次只开发一个项目…@paralife:请看我的另一个答案一个选项:不要在init文件中定义那些便利函数,在依赖于主要内容的新项目中定义它们,例如,paralife hunchentoot可能是一个项目,其中包含的启动/停止功能取决于hunchentoot。@paralife:符号的插入通常发生在读取时,当符号从“外部表示”转换为符号时。如果您所说的符号所属的软件包不存在,则无法对其进行扣押。Rainer使用FIND-SYMBOL的代码将符号的查找延迟到运行时,并且出于很少运行、性能不关键的方便函数的特定目的,这是完全合理的,但可能不应在紧密的内部循环中使用。您的意思是将模板放在宏中?您的意思是将模板放在宏中?
(funcall (find-symbol "RENDER-SUPER-FANCY-GRAPHICS"
                      "THIS-PACKAGE-DOES-NOT-YET-EXIST")
         *standard-output* :width 1000 :height 800)