我读"在口齿不清"和遇到的这代码(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,并因此不是,不应该的,是有用在"现实世界中的代码"。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top