列表中的列表

时间:2015-05-19 21:46:13

标签: prolog

我开始学习Prolog,但是我找不到任何关于我想做什么的例子:包含其他几个列表的列表;有可能吗?

像这样:[ [1,1,1], [2,2,2], [3,3,3] ]

提前谢谢。

3 个答案:

答案 0 :(得分:3)

尝试在提示X = [ [1,1,1], [2,2,2], [3,3,3] ].处输入内容。 Prolog会将其输入给您 - 即它接受此作为有效输入。

以下是指定相同列表X的所有不同方法:

    X = [ [1,1,1], [2,2,2], [3,3,3] ].
    X = [ [1,1,1], [2,2,2] | [ [3,3,3] ] ].
    X = [ [1,1,1] | [ [2,2,2], [3,3,3] ] ].
    A = [1,1,1], X = [A | [ [2,2,2], [3,3,3] ] ].
    A = [1,1,1], B = [ [2,2,2], [3,3,3] ], X = [A | B].
    A = [1 | T], T = [1,1], B = [ [2,2,2], [3,3,3] ], X = [A | B].
    T = [1,1], B = [ [2,2,2], [3,3,3] ], X = [A | B], A = [1 | T].

这显示了如何按位组构构建列表。没有"递归"所需要的,只是简单的规范和结构;或者结构和规格,顺序无关紧要。

答案 1 :(得分:1)

好的,所以我设法做了以下事情:

?- findall([NAME,POST,TIMEFLIGHT], pilot(_,NAME,POST,_,_,TIMEFLIGHT,_), Xs),
   show(Xs).

show([]):-!.
show([Head|Tail]):-
   write(Head),nl,
   show(Tail).

这给了我想要的东西,这是:

Xs = [ [Joe, Pilot, 100], [Stan, Co-Pilot, 300], [Steve, Pilot, 150] ].

答案 2 :(得分:0)

Prolog在列表中非常“开放”。列表的一些示例和定义列表的方法:

?- X=[1,[a]].
X = [1, [a]].

?- X='.'(1,[2]).
X = [1, 2].

?- X=[1|foo].
X = [1|foo].