我想知道如何创建一个谓词,将所有结果从一些查询中获取(所以我得到一个结果并按分号直到我得到False)在列表中.
例如,如果我foo(X,[1,2,3]).在一些Prolog听众中写,假设结果是
X=[11];
X=[22];
False.
Run Code Online (Sandbox Code Playgroud)
我想把所有这些结果都列在一个列表中,所以会发生类似下面的事情.
?-another_foo(X,[1,2,3]).
X=[[11],[22]].
Run Code Online (Sandbox Code Playgroud)
another_foo会以某种方式使用foo创建一个包含foo所有结果的列表.我只是不知道如何.
pts*_*pts 17
使用内置谓词 findall/3:
?-findall(X0, foo(X0, [1,2,3]), X).
X = [[11], [22]].
Run Code Online (Sandbox Code Playgroud)
你可以定义你的 another_foo/2:
another_foo(X, Input) :-
findall(X0, foo(X0, Input), X).
Run Code Online (Sandbox Code Playgroud)