在Common Lisp中,有没有获取变量地址的方法?

5

我正在尝试在Common Lisp上实现XOR链接列表,但是我需要获取变量的地址才能对其执行任何位运算。

是否有类似于Python的id()函数可以获取变量的内存地址?


1
如果你需要像地址这样的低级别的东西,Common Lisp 不是正确的工具;但它是高级编程非常好的工具。为什么你需要在 Lisp 中使用 XOR 链表? - Basile Starynkevitch
1
垃圾回收可以移动对象,实现时可能会复制整个对象。因此,你所尝试操作的对象地址是不可靠的。 - Joshua Taylor
2
你可能会发现在Common Lisp中实现展开链表更容易,并且具有许多相同的内存优势。 - Joshua Taylor
@BasileStarynkevitch,其实我只是想为了做而做。我很感兴趣看看这能否在Lisp中实现,以及实现起来有多难。 - Oleg Semenovsky
@JoshuaTaylor,我试图实现双向链表,但是我发现异或链接列表是使用 cons 单元实现的最佳方式。我想我错了。 - Oleg Semenovsky
显示剩余3条评论
2个回答

7
通常,Common Lisp 中的内存管理由某种垃圾回收器执行。其中许多算法在收集周期中移动内存中的对象。
因此,你不能指望每个对象都有固定的地址,出于这个原因,标准中没有提供获取 Common Lisp 对象地址的操作。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接