将查询的所有结果放在Prolog的列表中

时间:2010-12-02 21:18:36

标签: prolog

我想知道如何制作一个谓词,将所有结果从一些查询中获取(所以我得到一个结果并按分号直到我得到False)。

例如,如果我在一些Prolog监听器中写foo(X,[1,2,3]).,那么假设结果是

X=[11];
X=[22];
False.

我希望将所有这些结果都列在一个列表中,这样就会发生以下情况。

?-another_foo(X,[1,2,3]).
X=[[11],[22]].

another_foo会以某种方式使用foo创建一个包含foo所有结果的列表。 我只是不知道如何。

1 个答案:

答案 0 :(得分:16)

使用内置谓词findall/3

?-findall(X0, foo(X0, [1,2,3]), X).
X = [[11], [22]].

您可以定义another_foo/2

another_foo(X, Input) :-
  findall(X0, foo(X0, Input), X).