Prolog 递归地填充列表

Prolog 递归地填充列表,prolog,Prolog,我想写一个规则来耗尽数据库并用一些项填充列表,但是prolog解释器总是返回:Out of global stack fill(SomeParams, List) :- append(List, [NewItem], List), fail. 有没有一种方法可以在不进行统一的情况下扩展列表?您的追加无法工作,因为它声明列表是将[NewItem]追加到列表的结果,所以列表应该是两件事同时发生的。请记住,Prolog中的变量是逻辑变量,一旦绑定,就永远无法更改 正如Capelical所说,您可以使

我想写一个规则来耗尽数据库并用一些项填充列表,但是prolog解释器总是返回:Out of global stack

fill(SomeParams, List) :- append(List, [NewItem], List), fail.

有没有一种方法可以在不进行统一的情况下扩展列表?

您的
追加
无法工作,因为它声明
列表
是将
[NewItem]
追加到
列表
的结果,所以
列表
应该是两件事同时发生的。请记住,Prolog中的变量是逻辑变量,一旦绑定,就永远无法更改

正如Capelical所说,您可以使用,或者如果您想要更多的控制,您可以这样做:

%% some facts
fact(1).
fact(2).
fact(3).

fill(List, NewList) :-
    fact(X),
    not(member(X, List)), !,
    fill([X|List], NewList).
fill(List, List).

%%
fill(NewList) :- fill([], NewList).
然后


使用findall/3。或findall/4以获取更高级的选项
try ?- fill(L).