代码之家  ›  专栏  ›  技术社区  ›  user1220978

Common Lisp中(loop for)和(loop:for)之间的差异[重复]

  •  2
  • user1220978  · 技术社区  · 11 年前

    我刚看到Sylvester对 this question ,我觉得奇怪的是,循环中到处都是冒号。

    通常,我会写

    (loop for n below 10 do (princ n) (terpri))
    

    而不是

    (loop :for n :below 10 :do (princ n) (terpri))
    

    经过一些测试,我看到第一个循环中的符号 for , below do 然后是cl用户的一部分( 编辑 :实际上不是 ,只有另外两个,可能是因为 也是cl包中的宏),而不是第二个。同样,一个“X”单独将是cl用户的一部分,而不是“:X”。这个 symbol-package 函数告诉我后者在关键字包中。

    现在,没有冒号的第一个循环看起来更漂亮,所以我想知道前面的注释是否是使用第二个循环的好理由。这些符号被“包括”在当前的包装中看起来并不有害,但也许我忽略了后果。

    知道吗?

    2 回复  |  直到 11 年前
        1
  •  3
  •   sheikh_anton    11 年前

    你大多数人已经回答了你自己的问题,区别正如你所描述的。 :some-symbol 将在 :KEYWORD 包装,以及 'SOME-SYMBOL 将在您当前的包中 CL-USER 默认情况下。在里面 loop 宏观而言,这只是品味的问题。有些人喜欢使用 :for 例如,为了在文本编辑器中获得更好的语法高亮显示。

        2
  •  3
  •   Rainer Joswig mmmmmm    11 年前
    CL-USER 23 > (find-symbol "LOOP" "CL")
    LOOP
    :EXTERNAL
    
    CL-USER 24 > (find-symbol "FOR" "CL")
    NIL
    NIL
    

    LOOP COMMON-LISP 并将其导出。 FOR 两者都不是。因此,在每个没有 用于 如果没有继承符号,则在编写 LOOP FOR

    就是这样。通常这应该没问题。。。