广义表的head和tail函数
在广义表(Generalized List)中,
head
和
tail
函数是两个基本操作,用于操作和提取广义表的不同部分。这两个函数的概念来源于列表处理语言(如LISP)中的基本操作,主要作用如下:
1. head 函数
- 定义:
head
函数用于提取广义表的第一个元素。这个元素可以是一个原子,也可以是一个子表。 - 操作对象:广义表。
- 结果:返回广义表的第一个元素。
示例
假设广义表为: L = ( a , ( b , c ) , d ) L = (a, (b, c), d) L=(a,(b,c),d)
head(L)
的结果是: a a a
(即广义表的第一个元素)。
如果广义表是: L = ( ( a , b ) , c , d ) L = ((a, b), c, d) L=((a,b),c,d)
head(L)
的结果是: ( a , b ) (a, b) (a,b)
(即第一个元素本身是一个子表,head
返回整个子表)。
2. tail 函数
- 定义:
tail
函数用于提取广义表中去掉第一个元素后的剩余部分。 - 操作对象:广义表。
- 结果:返回一个广义表,包含去掉第一个元素后的其余部分。
示例
假设广义表为: L = ( a , ( b , c ) , d ) L = (a, (b, c), d) L=(a,(b,c),d)
tail(L)
的结果是: ( ( b , c ) , d ) ((b, c), d) ((b,c),d)
(即去掉第一个元素 a a a 后的剩余部分,仍然是一个广义表)。
如果广义表是: L = ( ( a , b ) , c , d ) L = ((a, b), c, d) L=((a,b),c,d)
tail(L)
的结果是: ( c , d ) (c, d) (c,d)
(即去掉第一个子表 ( a , b ) (a, b) (a,b) 后的其余部分)。
总结对比
函数 | 作用 | 结果 | 示例结果 |
---|---|---|---|
head | 提取第一个元素 | 可以是原子或子表 | a a a 或 ( a , b ) (a, b) (a,b) |
tail | 去掉第一个元素后的部分 | 剩余的广义表 | ( ( b , c ) , d ) ((b, c), d) ((b,c),d) 或 ( c , d ) (c, d) (c,d) |
广义表分解规则
广义表
L
L
L 一般可以表达为:
L
=
(
h
e
a
d
(
L
)
,
t
a
i
l
(
L
)
)
L = (head(L), tail(L))
L=(head(L),tail(L))
这表明广义表由其第一个元素(head
)和剩余部分(tail
)组成。
举例
对于广义表: L = (a, (b, c), d, e)
- 分解操作:
head(L)
= a a atail(L)
= ( ( b , c ) , d , e ) ((b, c), d, e) ((b,c),d,e)
- 如果对
tail(L)
再次应用head
和tail
:head(tail(L))
= ( b , c ) (b, c) (b,c)tail(tail(L))
= ( d , e ) (d, e) (d,e)