之间有什么区别'(a b c)和(list'a'b'c)?
-
07-07-2019 - |
题
我读"在口齿不清"和遇到的这代码(I简化它的一位)。
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)
是一样的吗?有什么区别?
解决方案
呼叫列出创建一个新的清单每次进行评估。列表中的文字可能会被放置在一个只读存储器段之后汇编。一个破坏性的更新名单中与NCONC是那么有问题的,可能与未定义的后果(分割的错误,改变该文本为未来的参考文献,或者没有在所有)。
其他提示
变量 *
, **
和 ***
指定的语言 标准 他们是很有用的,当测试的东西。他们的一个特征REPL,并因此不是,不应该的,是有用在"现实世界中的代码"。
不隶属于 StackOverflow