从事实中创建一个prolog列表

时间:2015-03-09 17:43:35

标签: prolog

我想根据以下事实创建一个列表:

table(mickel).
table(harris).
table(wolfgang).
table(yanis).
table(antti).
table(peter).
table(jeroen).
table(johan).
table(luis).
table(eric).

但我不想使用内置规则或谓词, 除非我自己定义它们。 结果差不多就是:

?- seats(Seats).
Seats = [yanis,antti,peter,jeroen,johan,luis,eric,michel,
harris,wolfgang]

我不知道该怎么做,请帮忙。

1 个答案:

答案 0 :(得分:0)

您必须创建自己的findall谓词,post可能有所帮助:

seats(L) :- find([], L), !.

find(Acc, Loa) :- table(Y), uList(Y, Acc, AccNew), find(AccNew, Loa).
find(Acc, Acc).

uList(X, [], [X])  :- !.
uList(H, [H|_], _) :- !, fail.
uList(X, [H|T], [H|Rtn]) :- uList(X, T, Rtn).

请教:

?- seats(L).
L = [mickel, harris, wolfgang, yanis, antti, peter, jeroen, johan, luis|...].