Thu*_*ura 7 lisp sbcl common-lisp
我正在阅读"在lisp上",并遇到了这段代码(我简化了一下).
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)
Run Code Online (Sandbox Code Playgroud)
究竟是什么*意思?是以前的函数调用吗?它适合在现实世界的代码中使用吗?
为什么要(nconc * '(D E))改变第一个foo函数的返回值?
我一直以为(list 'a 'b 'c)和'(a b c)是一样的吗?有什么不同?
Chr*_*ian 14
每次评估时,对LIST的调用都会创建一个新列表.列表文字可能在编译后放在只读内存段中.然后使用NCONC对列表进行破坏性更新是有问题的,可能会产生不确定的后果(分段错误,更改未来引用的文字,或者根本没有任何内容).
| 归档时间: |
|
| 查看次数: |
562 次 |
| 最近记录: |