2. Cons Cell与list
2.1. Cons Cell
首先,从list的构成要素Cons Cell开始说明。Cons Cell是指存放有两个地址的内存空间。Cons Cell可以由cons函数建立。请尝试向解释器输入 (cons 1 2)。
-------------------
> (cons 1 2)
(1 . 2)
-------------------
得到 (1 . 2) 。cons会如图1所示,取得包含两个地址大小的内存空间,一个指向1,另二个指向2。保存着1的地址的一方称为car部,保存着2的地址的一方称为cdr部。car是Contents of the Address part of the Register的缩写,而cdr则是Contents of the Decrement part of the Register的缩写。这两个是,早期Lisp机内存里的部位名称。由此可以看出Cons Cell实际是内存空间。顺带,cons是“构成”的英文construct的缩写。
图1:Cons Cell


Cons Cell可以串连。
-------------------
> (cons 3 (cons 1 2))
(3 1 . 2)
-------------------
(3 1 . 2) 是 (3 . (1 . 2)) 的省略形式。此时,内存上的情景如图2所示。
图2:串连后的Cons Cell


此外,可以将不同种类的数据组合使用,以及嵌套。
-------------------
> (cons #\a (cons 3 "hello"))
(#\a 3 . "hello")
> (cons (cons 0 1) (cons 2 3))
((0 . 1) 2 . 3)
-------------------
之所以能够实现这种组合与嵌套,是由于Scheme对所有数据一律以地址进行管理。顺带,
#\c代表c字符。又如#
\a则代表a字符。