Data structures 链表的表示,如在lisp中

Data structures 链表的表示,如在lisp中,data-structures,lisp,computer-architecture,Data Structures,Lisp,Computer Architecture,有人能概述一下链表(如LISP中的链表)是如何在计算机内存中表示的吗?计算机是否利用cpu寄存器将指针保存在列表的头和其余部分,或者堆使用了什么?取决于具体情况。如果你有真正的问题,Stackoverflow是最好的 “LISP”是一个庞大的语言家族,有数百种不同的实现 已经尝试了各种实现链表的方法 有很多关于Lisp实现的书,有很多小型和大型的开源Lisp实现需要研究 相关文献可在此处找到,例如:这在很大程度上取决于所使用的特定编译器和语言运行时。然而,在一般情况下,Lisp类语言中的数据结构

有人能概述一下链表(如LISP中的链表)是如何在计算机内存中表示的吗?计算机是否利用cpu寄存器将指针保存在列表的头和其余部分,或者堆使用了什么?

取决于具体情况。如果你有真正的问题,Stackoverflow是最好的

“LISP”是一个庞大的语言家族,有数百种不同的实现

已经尝试了各种实现链表的方法

有很多关于Lisp实现的书,有很多小型和大型的开源Lisp实现需要研究


相关文献可在此处找到,例如:

这在很大程度上取决于所使用的特定编译器和语言运行时。然而,在一般情况下,Lisp类语言中的数据结构是堆分配的单元,带有指向其邻居的指针。当函数对数据进行操作时,这些数据被加载到硬件寄存器中

考虑Haskell中的链表类型:

 data [a] = [] | a : [a]
给定的列表可以写成:

1:(2:(3:(4:(5:[]))

或者更简洁地说:

[1,2,3,4,5]

这表示为以下形式的堆分配对象:

其中箭头表示指针;和
(:)
表示一个“cons cell”,一个存储指向当前元素的指针的小结构,以及列表的尾部


现在,当一个函数访问这个数据结构时,它将把指向该结构的指针加载到寄存器中,并开始从这些指针加载数据。具体细节取决于编译模型和运行时系统模型。例如,对于GHC Haskell,这是由。此外,指针中的低端位可用于指示指向的特定构造函数;它的评估状态(已评估或未评估)甚至是值本身(如果它很小)(这是最重要的)。

对于有关Lisp的哲学问题,最鼓舞人心的来源之一是。即使现在有点过时了。阅读它(好吧,很多年前)对我来说是一个启示,不仅是关于Lisp,而且是关于一般编程。另一本关于Lisp实现的好书是。如果您认真学习Lisp的内部结构,这两个工具将对您有很大帮助