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

时间:2014-03-18 07:51:23

标签: common-lisp conventions

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

3 个答案:

答案 0 :(得分:10)

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

这本身并不是一个问题,但它是使(某些)自动内省的元素更加困难的事情之一。如果您小心使用LOOP“关键字”的关键字,则只需查看包中的符号即可轻松识别所有函数,变量和宏的名称。

答案 1 :(得分:7)

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

答案 2 :(得分:5)

同样来自PCL:

  

循环关键字有点用词不当,因为它们不是关键字符号。实际上, LOOP 并不关心符号来自哪个包。当 LOOP 宏解析其正文时,它会将任何相应的命名符号视为等效。您甚至可以根据需要使用真实关键字 - :for:across等等 - 因为它们也具有正确的名称。但大多数人只使用普通符号。因为循环关键字仅用作语法标记,所以它们是否用于其他目的 - 作为函数或变量名称无关紧要。

(Peter Seibel, Practical Common Lisp Chapter 7,脚注8。)