我想知道如何制作一个谓词,将所有结果从一些查询中获取(所以我得到一个结果并按分号直到我得到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所有结果的列表。 我只是不知道如何。
答案 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).