Lisp ';(a b c)和(列表a和b和c)?
我正在阅读“OnLisp”,遇到了这段代码(我简化了一点)Lisp ';(a b c)和(列表a和b和c)?,lisp,common-lisp,sbcl,Lisp,Common Lisp,Sbcl,我正在阅读“OnLisp”,遇到了这段代码(我简化了一点) *到底是什么意思?它是上一个函数调用吗?它适合在真实世界的代码中使用吗 为什么(ncoc*'(de))更改第一个foo函数的返回值 我一直认为(列出'a'b'c)和(a b c)是一样的吗?有什么区别 每次评估时,对列表的调用都会创建一个新列表。编译后,列表文字可能会放在只读内存段中。然后,使用NCOC对列表进行破坏性更新是有问题的,可能会产生未定义的后果(分段错误、更改文字以供将来参考,或者什么都不做)。变量*、***和***由语言
到底是什么意思?它是上一个函数调用吗?它适合在真实世界的代码中使用吗*
- 为什么
更改第一个(ncoc*'(de))
函数的返回值foo
- 我一直认为
和(列出'a'b'c)
是一样的吗?有什么区别(a b c)
*
、***
和***
由语言指定,在测试时非常有用。它们是REPL的一个特性,所以在“真实世界的代码”中不有用,也不应该有用
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)