清单
列表是一种特殊的复合词。列表是归纳定义的:
- 原子
[]
是一个列表,表示空列表。 - 如果
Ls
是一个列表,则术语'.'(L, Ls)
也是一个列表。
在 Prolog 中有一种特殊的语法可以方便地表示列表:
- 列表
'.'(a, '.'(b, '.'(c, [])))
也可以写成[a,b,c]
。 - 术语
'.'(L, Ls)
也可以写成[L|Ls]
。
这些符号可以以任何方式组合。例如,术语 [a,b|Ls]
是列表 iff Ls
是列表。
创建列表
由与变量 List 统一的文字组成的列表:
?- List = [1,2,3,4].
List = [1, 2, 3, 4].
通过 consing 建立一个列表:
?- Tail = [2, 3, 4], List = [1|Tail].
Tail = [2, 3, 4],
List = [1, 2, 3, 4].
使用内置的 length/2
构建未知值列表:
?- length(List,5).
List = [_G496, _G499, _G502, _G505, _G508].
因为在 Prolog 中,一切本质上都是一个术语,所以列表行为异构:
?- List = [1, 2>1, this, term(X), 7.3, a-A].
List = [1, 2>1, this, term(X), 7.3, a-A].
这意味着列表还可以包含其他列表,也称为内部列表:
List = [[1,2],[3,[4]]].