我刚看到Sylwester给this question的答案,我觉得很奇怪,这个循环到处都是冒号。
通常,我会写
(loop for n below 10 do (princ n) (terpri))
而不是
(loop :for n :below 10 :do (princ n) (terpri))
经过一些测试后,我看到第一个循环时,符号for
,below
和do
成为cl-user的一部分(编辑 :实际上不是do
,只有其他两个,可能是因为do
也是cl包中的一个宏),而不是第二个。同样,单独的&#X; X将成为cl-user的一部分,而不是' X。 symbol-package
函数告诉我后者在关键字包中。
现在,没有冒号的第一个循环对我来说看起来更漂亮,所以我想知道前面的说法是否是使用第二个循环的好理由。符号变为"包含"在当前的包中看起来相当无害,但也许我忽略了后果。
有什么想法吗?
答案 0 :(得分:3)
你已经回答了自己的问题,区别在于你所描述的。 :some-symbol
将在:KEYWORD
个包中,'SOME-SYMBOL
默认位于您当前的包CL-USER
中。在loop
宏中,这只是一个品味问题。例如,有些人更喜欢使用:for
表示法在文本编辑器中获得更好的语法突出显示。
答案 1 :(得分:3)
CL-USER 23 > (find-symbol "LOOP" "CL")
LOOP
:EXTERNAL
CL-USER 24 > (find-symbol "FOR" "CL")
NIL
NIL
LOOP
是COMMON-LISP
包中的符号,会将其导出。 FOR
既不是。因此,在每个没有FOR
符号并且不继承符号的包中,在编写LOOP FOR
循环时会添加这样的符号。
那就是它。通常这应该没问题......