列表可以可视化成由点对构成的结构,就像多米诺骨牌。(Lisp 读取器读不懂这样的图,但是可以读懂文本记号。)下面的这个图就表示了一个包含 3 个元素的列表 ( rose violet buttercup):
--- --- --- --- --- ---
| | |--> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
--> rose --> violet --> buttercup
在上图中,每个格子表示一个槽,而这个槽可以指向一个 Lisp 对象。每对格子(就是两个格子)表示一个点对。其中的箭头表示这个槽指向某个 Lisp 对象。被指的对象只能是原子或另一个点对。
在这个例子里,第一个格子,也就是第一个点对的 CAR 位置,指向(或者说储存)rose(一个符号)。而第二个格子,也就是第一个点对的 CDR 位置,指向了另一对格子,也就是第二个点对。第二个点对的 CAR 指向 violet,而 CDR 指向了第三个点对。第三个(也就是最后一个)点对的 CDR 指向 nil。
--------------- ---------------- -------------------
| car | cdr | | car | cdr | | car | cdr |
| rose | o-------->| violet | o-------->| buttercup | nil |
| | | | | | | | |
--------------- ---------------- -------------------
--- --- --- ---
| | |--> | | |--> nil
--- --- --- ---
| |
| |
--> A --> nil
--- --- --- --- --- ---
| | |--> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
| --> oak --> maple
|
| --- --- --- ---
--> | | |--> | | |--> nil
--- --- --- ---
| |
| |
--> pine --> needles
-------------- -------------- --------------
| car | cdr | | car | cdr | | car | cdr |
| o | o------->| oak | o------->| maple | nil |
| | | | | | | | | |
-- | --------- -------------- --------------
|
|
| -------------- ----------------
| | car | cdr | | car | cdr |
------>| pine | o------->| needles | nil |
| | | | | |
-------------- ----------------