Prolog编程中的列表、结构处理与排序算法
1. 列表作为结构
在Prolog中,列表也是一种结构。具体来说,列表是一种仅在右侧分支的树结构。例如,列表 [a,b,c]
在函子 - 参数表示法中可写为 .(a,.(b,.(c,[])))
,但通常我们使用方括号的形式。以下是一些等价表示:
- .(a,[])
等价于 [a]
- .(a,.(b,.(c,[])))
等价于 [a,b,c]
- .(a,b)
等价于 [a|b]
(这是一个不恰当列表)
- .(a,.(b,.(c,d)))
等价于 [a,b,c|d]
(另一个不恰当列表)
每个非空列表都以点( .
)作为主函子,但空列表 []
不是结构,也不包含点函子。列表的分支特点是每个点函子有两个参数,第一个参数是一个元素,第二个参数是另一个列表,即每个列表由一个元素加上另一个列表或 []
组成。如果列表不以 []
结尾,则称为不恰当列表。
列表相对于多参数结构的一大优势是,无需知道列表元素的数量就能对其进行处理。任何非空列表都能与 .(X,Y)
(更常见的写法是 [X|Y]
)进行合一,然后可以处理元素