1.9.2 使用 setq

实际上,几乎总是对set的第一个参数加引号。set和引用的第一个参数的组合是如此常见,以至于它有自己的名称:特殊形式setq。这个特殊形式与set几乎相同,只是第一个参数被setq自动引用,因此您不需要自己输入引号。此外,作为额外的便利,setq允许您在一个表达式中设置多个不同的变量为不同的值。

为了使用setq将变量carnivores的值设置为列表'(lion tiger leopard),可以使用以下表达式:

(setq carnivores '(lion tiger leopard))

这与使用set完全相同,只是setq自动引用了第一个参数。(setq中的‘q’表示quote。)

使用set,表达式如下:

(set 'carnivores '(lion tiger leopard))

此外,setq还可以用于为不同的变量分配不同的值。第一个参数绑定到第二个参数的值,第三个参数绑定到第四个参数的值,依此类推。例如,您可以使用以下表达式将树的列表分配给符号trees,将食草动物的列表分配给符号herbivores

(setq trees '(pine fir oak maple)
      herbivores '(gazelle antelope zebra))

(表达式同样可以在一行上,但它可能不适合一页;并且人们更容易阅读格式良好的列表。)

尽管我一直在使用术语“分配”,但还有一种理解setsetq运作方式的方式;即setsetq使符号指向列表。这种思考方式非常常见,在接下来的章节中,我们将至少遇到一个其名称中包含“指针”的符号。之所以选择这个名称,是因为符号有一个值,具体来说是一个列表,与之相关联;或者,换句话说,该符号被设置为指向该列表。