为什么有些人在循环宏中为子句使用关键字?

Pue*_*Pop 3 conventions common-lisp

它能解决任何问题吗?根据PCL的第一个脚注,如果不是关键字,它会在当前包中实现符号.由于所有关键字都在关键字包中实现,因此可以防止在不同的包中嵌入多个符号.但还有其他优势吗?它创造了什么问题?(我猜这肯定存在问题,因为它不是普遍的惯例)

Vat*_*ine 10

不,唯一的好处是不会在您的代码被读入的任何包中结束额外的符号.

这本身并不是问题,但它使得(某些)自动内省的元素更加困难.如果您小心使用LOOP"关键字"的关键字,则可以通过简单地查看包中的符号来轻松识别所有函数,变量和宏的名称.


小智 7

在支持lisp的编辑器中,突出显示关键字.在循环中使用关键字有助于突出循环结构.


Fra*_*kow 5

同样来自PCL:

循环关键字有点用词不当,因为它们不是关键字符号.实际上,LOOP不关心符号来自哪个包.当LOOP宏解析它的主体时,它会认为任何适当命名的符号等价.你甚至可以使用真正的关键字,如果你wanted-- :for,:across等-因为他们也有正确的名称.但大多数人只使用普通符号.因为循环关键字仅用作语法标记,所以它们是否用于其他目的 - 作为函数或变量名称无关紧要.

(Peter Seibel,Practical Common Lisp,第7章,脚注8)