【发布时间】:2012-11-02 18:57:11
【问题描述】:
用 C 等低级语言实现 Lisp 的 cons/pair 有哪些选择?
一种常见的实现是由字段 type、car 和 cdr 组成的结构。我知道链表在存储方面效率不高,但是额外的 type 字段会使情况变得更糟。
我在 Wikipedia 上读到 Lisp machines 用于为每个单词添加额外的位以获取类型信息。但是今天的架构(x86、ARM)有哪些选择呢?
【问题讨论】:
-
你不是基本要实现栈数据结构吗?
-
@bitmask 我猜 Lisp 在幕后可以根据情况使用堆栈或向量而不是列表,但我不确定。
-
@Halst,线性数据结构怎么能满足要求?这是一个 pair,如果我正确地记住了我的 lisp,它甚至可以循环。任何类型的图表都是可能的。我认为不太可能将其设置为
struct或void*[2]或类似的东西。 -
@JensGustedt 我记得在某处读过现代 Lisp 编译器试图检测何时可以用向量有效地替换列表。虽然它应该是一个适当的列表。