# 10.2.1 自求值表达式（DONE）

所有不是 列表(list) 和 符号(symbol) 的表达式均为 自求值表达式(self-evaluation form)。 顾名思义，自求值表达式的求值结果就是它们本身。也就是说，数字25 求值后 得到 25，字符串 "foo" 求值后得到字符串 "foo"。类似的，对向量求值并不会对其组成元素求值——它会返回向量本身。

```
'123               ; A number, shown without evaluation.
     ⇒ 123
123                ; Evaluated as usual—result is the same.
     ⇒ 123
(eval '123)        ; Evaluated "by hand"—result is the same.
     ⇒ 123
(eval (eval '123)) ; Evaluating twice changes nothing.
     ⇒ 123
```

自求值表达式会生成一个融入程序的值。因此你不应当使用 setcar， aset 或者类似的操作去修改它们。Lisp 解释器很可能会在求值后，将这些自求值表达式作为共享的结构，生成统一的常数类型。查阅 可变性 章节。

由于 Lisp 中数字，字符，字符串以及向量都是自求值表达式，我们通常可以直接字面地写它们。不过，有不少类型是缺少读取语法，没有办法直接字面地写。此时，我们可以借用其他 Lisp 表达式 去构造这些结构，这里有一个例子：

```
;; Build an expression containing a buffer object.
(setq print-exp (list 'print (current-buffer)))
     ⇒ (print #<buffer eval.texi>)
;; Evaluate it.
(eval print-exp)
     -| #<buffer eval.texi>
     ⇒ #<buffer eval.texi>
```
