cons 必须依附于一个已有的列表才能操作。14 你不能从完全空无一物开始构造。如果要构建列表,至少需要以空列表作为起点。下面是一系列使用 cons 逐步构造花卉列表的表达式。如果你正在 GNU Emacs 的 Info 中阅读本文,可以照常逐个执行;执行结果会在 ‘⇒’ 后显示,可理解为 “求值结果为(evaluates to)”。
(cons 'buttercup ())
⇒ (buttercup)
(cons 'daisy '(buttercup))
⇒ (daisy buttercup)
(cons 'violet '(daisy buttercup))
⇒ (violet daisy buttercup)
(cons 'rose '(violet daisy buttercup))
⇒ (rose violet daisy buttercup)
第一个例子中,空列表写作 (),构造出的列表由 buttercup 后跟空列表组成。可以看到,构造出的列表中并不会显示空列表,只会看到 (buttercup)。空列表不计入列表元素,因为它内部没有任何内容。一般来说,空列表是不可见的。
第二个例子 (cons 'daisy '(buttercup)) 将 daisy 放在 buttercup 前面,构造出一个双元素列表;第三个例子则将 violet 放在前面,构造出三元素列表。
实际上,你也可以将一个元素 cons 到一个原子上,从而生成点对。点对不在本章讨论范围内,参见 Dotted Pair Notation in The GNU Emacs Lisp Reference Manual。