(a (b c) d)
也是一棵由图 3.8 所代表的树。 (如果你逆时针旋转 45 度,你会发现跟图 3.3 一模一样)
Common Lisp 有几个内置的操作树的函数。举例来说, copy-tree
接受一个树,并返回一份副本。它可以这么定义:
把这跟 36 页的 copy-list
比较一下; copy-tree
复制每一个 Cons 对象的 与 cdr
,而 copy-list
仅复制 cdr
。
而我们想要把各处的 x
都换成 y
。调用 是不行的,它只能替换序列 (sequence)中的元素:
这个调用是无效的,因为列表有三个元素,没有一个元素是 x
。我们在这所需要的是 subst
,它替换树之中的元素。
操作树的函数通常有这种形式, car
与 同时做递归。这种函数被称之为是 双重递归 (doubly recursive)。