2.4.6 点对类型
点对是 Lisp 中最基础,最常用的容器对象。它包含两个槽(slot),CAR 槽和 CDR 槽。其中每个槽都可以储存任何 Lisp 对象。通常我们提到点对的CAR时,我们是在说这个点对 CAR 槽所储存的对象。 CDR 同理。
我们熟知的 列表 就是有一系列的点对嵌套组成的,其中每个点对的 CDR 槽都储存着下一个 点对,而最后一个点对的 CDR 槽储存着 nil。点对是构成 Lisp 列表的最基础的组件,我们称任何由点对构成的结构都统称为列表结构。
给 C 程序员的提示:Lisp 列表看起来就像由点对单元组成的链表。在 Lisp 中,指针都是隐式使用的,因此我们不会对 储存值的槽 和 指向数值的指针 进行区分。
点对是 Lisp 的核心数据结构。所有不是点对的对象统称为原子。
列表的读取语法和打印表示是相同的。一个列表的读取语法(或打印表示):一个左括号,任意数量的元素,以及一个右括号。这里有几个例子:
以上列表中,括号内的对象都是该列表的元素。也就是说,每个元素都占着一个点对槽。点对的 CAR 槽储存元素,而 CDR 槽则指向列表中的下一个点对,而下一个点对储存着下一个元素。最后的点对的 CDR 槽则指向 nil。
CAR 和 CDR 听上去很怪,这是 Lisp 的历史遗留问题,不要多想。
最后更新于
这有帮助吗?