读取(reading) 一个 Lisp 对象,是指将文本形式的 Lisp 表达式解析为对应的 Lisp 对象。
Lisp 程序正是通过这种方式从代码文件加载到 Lisp 环境中的。
我们把这段文本称为该对象的 读取语法(read syntax)。
例如,文本 ‘(a . 5)’ 是一个 cons 单元的读取语法,其 CAR 为 a,CDR 为数字 5。
打印(printing) 一个 Lisp 对象,是指生成表示该对象的文本—— 将对象转换为它的 打印表示(printed representation) (see 打印表示与读入语法)。 打印上面所说的 cons 单元会得到文本 ‘(a . 5)’。
读取与打印大致互为逆操作:
打印一段文本读取后得到的对象,通常会得到相同的文本;
读取一个对象打印后得到的文本,通常会得到外观相似的对象。
例如,打印符号 foo 得到文本 ‘foo’,读取该文本会返回符号 foo。
打印元素为 a 和 b 的列表得到文本 ‘(a b)’,
读取该文本会得到一个元素为 a 和 b 的列表(但不是同一个列表对象)。
不过,这两种操作并非严格互逆,主要有三类例外: