在prolog中根据事实创建列表

在prolog中根据事实创建列表,prolog,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,jo

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

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]

我不知道该怎么办,请帮助。

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

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|...].

我认为您应该从一个Prolog教程开始,并特别注意列表处理示例(网上有)。然后尝试解决你的问题,展示你尝试了什么以及你在哪里遇到了困难。你说,“我不想使用内置规则或谓词,除非我自己定义它们”。你的意思是你想实现你自己的Prolog吗?