gpt4 book ai didi

lisp - Lisp 中值的内存表示

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:12 25 4
gpt4 key购买 nike

我读到在原始的 lisp 中,CONS 在内存中以 36 位表示,前 18 位用于 CAR(15 位是地址,3 位表示它是 ATOM 的地址还是另一个 CONS),后 18 位是对于 CDR(15 位...)。我的问题是,如果 ATOM 需要多于一个字节(例如字符串),那么它的表示形式是什么?

最佳答案

“Lisp”是一个语言家族,而不是单一的语言。家族中的许多语言(例如 Common Lisp)不指定内部表示,而是指定结构和函数必须保留的契约。在 cons 的情况下,大致是方程式:

(car (cons x y)) == x
(cdr (cons x y)) == y

以及 cons 每次被调用时返回一个新对象的要求。在某些 Lisp 中,cons 单元是不可变的,因此不存在返回新对象的要求。

当然,实际上是有实现的,它们确实需要存储东西,问问它们是如何做到的也不是没有道理的。通常,最好将 cons 单元格视为一个大到足以容纳两个指针的结构,并且可能包含一些保存其类型的信息(以便它可以被识别为 cons 细胞)。但是,实现使用的指针可能会被标记,因此如果例如前三位是一些特殊值,则“指针”可以被识别为某些原始值的编码。

这里的重要部分是你通常不需要知道机器上的底层表示,而且在你知道的情况下(例如,如果你正在编写代码来与另一种语言(例如,C )),那么您正在寻找的答案将特定于每个实现。

关于lisp - Lisp 中值的内存表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28128620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com