Common Lisp 中 (loop for) 和 (loop :for) 的区别
Difference between (loop for) and (loop :for) in Common Lisp
我刚看到Sylwester对的回答,我觉得很奇怪,循环到处都是冒号。
通常我会写
(loop for n below 10 do (princ n) (terpri))
而不是
(loop :for n :below 10 :do (princ n) (terpri))
经过一些测试,我发现在第一个循环中,符号 for
、below
和 do
是 cl-user 的一部分(edit :其实不是do
,只有另外两个,可能是因为do
也是cl包中的一个宏),而不是第二个。同样,'X alone will then be part of cl-user, not ':X。 symbol-package
函数告诉我后者在关键字包中。
现在,没有冒号的第一个循环对我来说看起来更漂亮,所以我想知道前面的评论是否是使用第二个循环的充分理由。当前包中的符号变为 "included" 看起来很无礼,但也许我忽略了后果。
有什么想法吗?
你大部分已经回答了你自己的问题,区别就像你描述的那样。默认情况下,:some-symbol
将在 :KEYWORD
包中,'SOME-SYMBOL
将在您当前的包 CL-USER
中。在 loop
宏中,这只是个人喜好问题。例如,有些人更喜欢使用 :for
符号来在他们的文本编辑器中获得更好的语法突出显示。
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
循环时将添加这样的符号。
就是这样。通常这应该没问题...
我刚看到Sylwester对
通常我会写
(loop for n below 10 do (princ n) (terpri))
而不是
(loop :for n :below 10 :do (princ n) (terpri))
经过一些测试,我发现在第一个循环中,符号 for
、below
和 do
是 cl-user 的一部分(edit :其实不是do
,只有另外两个,可能是因为do
也是cl包中的一个宏),而不是第二个。同样,'X alone will then be part of cl-user, not ':X。 symbol-package
函数告诉我后者在关键字包中。
现在,没有冒号的第一个循环对我来说看起来更漂亮,所以我想知道前面的评论是否是使用第二个循环的充分理由。当前包中的符号变为 "included" 看起来很无礼,但也许我忽略了后果。
有什么想法吗?
你大部分已经回答了你自己的问题,区别就像你描述的那样。默认情况下,:some-symbol
将在 :KEYWORD
包中,'SOME-SYMBOL
将在您当前的包 CL-USER
中。在 loop
宏中,这只是个人喜好问题。例如,有些人更喜欢使用 :for
符号来在他们的文本编辑器中获得更好的语法突出显示。
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
循环时将添加这样的符号。
就是这样。通常这应该没问题...