我正在阅读"On“,并遇到了这段代码(我把它简化了一点)。
CL-USER> (defun foo ()
'(a b c))
FOO
CL-USER> (foo)
(A B C)
CL-USER> (nconc * '(D E))
(A B C D E)
CL-USER> (foo)
(A B C D E)
CL-USER> (defun foo ()
(list 'a 'b 'c))
STYLE-WARNING: redefining FOO in DEFUN
FOO
CL-USER> (foo)
(A B C)
CL-USER> (nconc * '(D E))
(A B C D E)
CL-USER> (foo)
(A B C)
*
到底是什么意思?是以前的函数调用吗?它适合在现实世界中使用吗?(nconc * '(D E))
要更改第一个foo
函数的返回值?(list 'a 'b 'c)
和'(a b c)
是一样的?有什么关系?发布于 2009-09-13 09:30:33
每次计算时,对LIST的调用都会创建一个新列表。列表文本可以在编译后放置在只读内存段中。然后,使用NCONC对列表进行破坏性更新是有问题的,可能会带来未定义的后果(分段错误、更改文本以供将来引用,或者什么也不做)。
发布于 2009-09-13 10:25:34
变量*
、**
和***
是由语言标准指定的,它们在测试事物时非常有用。它们是REPL的一个特性,因此在“真实世界的代码”中是不有用的,也不应该如此。
https://stackoverflow.com/questions/1417266
复制相似问题