1.9.1 使用 set

要将符号 flowers 的值设置为列表 '(rose violet daisy buttercup),请通过将光标定位在表达式后并键入 C-x C-e 来评估以下表达式。

(set 'flowers '(rose violet daisy buttercup))

列表 (rose violet daisy buttercup) 将出现在回显区域。这是由 set 函数返回的内容。作为副作用,符号 flowers 被绑定到该列表;也就是说,可以将符号 flowers 视为变量,然后将该列表赋给它作为值。(顺便说一下,这个过程说明了对于Lisp解释器来说,设置值是我们人类感兴趣的主要效果。这是因为如果Lisp函数没有出错,它必须返回一个值,但只有在设计为具有副作用时才会有副作用。)

在评估 set 表达式后,可以评估符号 flowers,它将返回刚刚设置的值。这是该符号。将光标放在其后,然后键入 C-x C-e

flowers

当你评估 flowers 时,列表 (rose violet daisy buttercup) 将出现在回显区域。

顺便说一下,如果你评估 'flowers,在带引号的变量前面,你将在回显区域看到符号本身,即 flowers。这是带引号的符号,所以你可以试一下:

'flowers

还要注意,当你使用 set 时,需要引用 set 的两个参数,除非你想要它们被评估。因为我们不想让任何一个参数被评估,所以变量 flowers 和列表 (rose violet daisy buttercup) 都被引用。(当你使用 set 而不引用其第一个参数时,第一个参数在执行任何其他操作之前被评估。如果你这样做而且 flowers 没有一个已经存在的值,你会得到一个错误消息,指明 ‘Symbol's value as variable is void’;另一方面,如果在评估后 flowers 返回了一个值,set 将尝试设置返回的值。有些情况下这是函数正确的行为,但这样的情况很少见。)