广义表的两个操作容易弄错 在这里记录一下
首先明确定义 广义表分两种 一种是普通表 一种是原子表
- 普通表结构为 一个表头 一个表尾
- 表尾一定指向另一张表 这张表包含一个元素 这个元素可以是原子 也可以是表 这就是为什么tail操作要加括号的原因 总之取到的一定是一张表
- 而表头 就是直接取对应的元素 这个元素同样可以是表也可以是原子 不需要加括号
- 原子表没有表尾 就只包含一个单独的原子元素
例题
A=(a,b,(c,d),(e,(f,g)))
head(tail(head(tail(tail(A)))))=d
过程如下 从里到外 tail A 就是取A的表尾 所以取到的是包含b的一张表 (a是A表头 为原子表) 所以取到的是(b)
又取表尾 所以取到的是 ((c,d))
然后head 取到的是表头元素 就是(c,d)
又tail 取到的是 包含d的表 因为此时c在表头上
所以是(d)
然后再head 去括号 所以是 d