9.1 符号:抽屉柜

在前面的小节中,我曾建议你可以把符号想象成 一个抽屉柜。函数定义放在一个 抽屉里,变量值放在另一个抽屉里,以此类推。存放变量值的抽屉里的内容 可以被修改,而不会影响存放函数定义的抽屉里的内容, 反之亦然。

实际上,每个抽屉里存放的都是值或 函数定义的地址。这就好比你在阁楼里发现一个旧柜子, 在其中一个抽屉里找到一张地图,上面标注着埋藏宝藏的位置。

(符号除了拥有名称、定义和变量值之外,还有一个抽屉用于存放 属性列表(property list),可用于记录其他信息。 属性列表不在此处讨论;详见 Property Lists in The GNU Emacs Lisp Reference Manual。)

下面是一个形象的示意:


            Chest of Drawers            Contents of Drawers

            __   o0O0o   __
          /                 \
         ---------------------
        |    directions to    |            [map to]
        |     symbol name     |             bouquet
        |                     |
        +---------------------+
        |    directions to    |
        |  symbol definition  |             [none]
        |                     |
        +---------------------+
        |    directions to    |            [map to]
        |    variable value   |             (rose violet buttercup)
        |                     |
        +---------------------+
        |    directions to    |
        |    property list    |             [not described here]
        |                     |
        +---------------------+
        |/                   \|