在剪辑中
(eq (cons 'a 'b) (cons 'a 'b))
是假的(NIL)
因为 first(AB) 和 second(AB) 在不同的内存中分配。
和
(eq 'a(car '(a b c)))
是真的(T)
但是,为什么?
像两个(AB)一样,由(car'(a b c))产生的第一个A和第二个A是否必须使用不同的内存?
clisp中如何分配内存块?
最佳答案
每次调用 CONS 都会创建一个新的 cons 单元格。这些是不同的对象。
(eq (cons 1 2) (cons 1 2))
-> NIL
具有相同名称的符号是相同的对象。
(eq 'foo 'foo) -> T
并发症:
具有相同名称但在不同包中的符号是不同的对象。
(eq 'bar::foo 'baz::foo) -> NIL
没有包的同名符号可能是同一个对象。
(eq '#:foo '#:foo) -> NIL
(let ((sym '#:foo))
(eq sym sym))
-> T
关于common-lisp - 如何在clisp中分配内存块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5691038/