common-lisp - 如何在clisp中分配内存块

标签 common-lisp

在剪辑中

(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/

相关文章:

macos - 由于 sdl_delay,lispbuilder-sdl 在 osx 上不工作

macros - Common Lisp Double-Backquote, Unquote, Quote, Unquote 序列?

common-lisp - Common Lisp 中的重复案例陈述

common-lisp - 非宏的 HANDLER-CASE 替代方案

common-lisp - 编程函数定义 : How to get rid of "eval" here?

lisp - 如何在 Common lisp 中注意多重条件检查?

operator-overloading - 覆盖/重载 + 运算符以对常见的 lisp 向量进行操作

common-lisp - 如何摆脱普通 lisp 中的 funcall

Scheme vs Common Lisp

lisp - 如何在 lisp 中执行 ((A.B).(C.D))