列表:
放在用方括号中的一组项目的集合,各项目之间使用逗号分割。
空表:
没有项目的列表,用[]表示。
表头与表尾:
[X|Y]可以与任意的列表匹配,匹配成功后,X绑定为列表的第一个项目的值,我们称之为表头(head)。
而Y则绑定为剩下的列表,我们称之为表尾(tail)。
表尾(tail)一定是列表,而表头(head)则是一个项目,该项目可以是表,也可以是其他的任何数据结构。
看下这个例子就清楚了:
1 ?- [a|[b,c,d]] = [a,b,c,d]. true. 2 ?- [a|b,c,d] = [a,b,c,d]. ERROR: Syntax error: Unexpected comma or bar in rest of list ... 3 ?- [H|T] = [a]. H = a, T = []. 4 ?- [H|T] = [a,b,c,d]. H = a, T = [b, c, d]. 5 ?- [H|T] = [a,[b,c,d]]. H = a, T = [[b, c, d]]. 6 ?- [H|T] = []. false. 7 ?- [A,B|T] = [a,b,c,d]. A = a, B = b, T = [c, d]. 8 ?- [a|[b|[c|[d|[]]]]] = [a,b,c,d]. true.
检查数据是否存在:
1 ?- member(a, [a,b,c]). true . 2 ?- member(d, [a,b,c]). false. 3 ?- member(d, [a,b,c,[d],e]). false. 4 ?- member([d], [a,b,c,[d],e]). true . 5 ?- member(X, [a,b,c]). X = a ; X = b ; X = c.
追加
1 ?- append([a,b,c],[d,e,f],X). X = [a, b, c, d, e, f]. 2 ?- append([],[d,e,f],X). X = [d, e, f]. 3 ?- append([a,b],Y,[a,b,c,d]). Y = [c, d]. 4?- append(X,Y,[a,b,c]). X = [], Y = [a, b, c] ; X = [a], Y = [b, c] ; X = [a, b], Y = [c] ; X = [a, b, c], Y = [] ;
删除
1 ?- delete([a,b,c,d,e], c, X). X = [a, b, d, e]