3.4 建立列表 (Building Lists)

../_images/Figure-3.5.png

图 3.5 复制的结果

函数 copy-list 接受一个列表,然后返回此列表的复本。新的列表会有同样的元素,但是装在新的 Cons 对象里:

  1. > (setf x '(a b c)
  2. y (copy-list x))
  3. (A B C)

图 3.5 展示出结果的结构; 返回值像是有着相同乘客的新公交。我们可以把 copy-list 想成是这么定义的:

  1. (defun our-copy-list (lst)
  2. (if (atom lst)
  3. lst
  4. (cons (car lst) (our-copy-list (cdr lst)))))

这个定义暗示着 x(copy-list x) 会永远 equal ,并永远不 eql ,除非 xNIL

最后,函数 append 返回任何数目的列表串接 (concatenation):

  1. > (append '(a b) '(c d) 'e)
  2. (A B C D . E)

通过这么做,它复制所有的参数,除了最后一个