首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >'(a,b,c)和(列表'a 'b 'c)之间有什么区别?

'(a,b,c)和(列表'a 'b 'c)之间有什么区别?
EN

Stack Overflow用户
提问于 2009-09-13 09:08:38
回答 2查看 769关注 0票数 7

我正在阅读"On“,并遇到了这段代码(我把它简化了一点)。

代码语言:javascript
运行
复制
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)是一样的?有什么关系?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-13 09:30:33

每次计算时,对LIST的调用都会创建一个新列表。列表文本可以在编译后放置在只读内存段中。然后,使用NCONC对列表进行破坏性更新是有问题的,可能会带来未定义的后果(分段错误、更改文本以供将来引用,或者什么也不做)。

票数 14
EN

Stack Overflow用户

发布于 2009-09-13 10:25:34

变量******是由语言标准指定的,它们在测试事物时非常有用。它们是REPL的一个特性,因此在“真实世界的代码”中是不有用的,也不应该如此。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1417266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档