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
将尝试设置返回的值。有些情况下这是函数正确的行为,但这样的情况很少见。)