我想知道如何创建一个谓词,将从某个查询中获得的所有结果(因此我得到一个结果并按分号,直到得到 False)放入列表中。
例如,如果我写foo(X,[1,2,3]).
在一些 Prolog 监听器中,假设结果是
X=[11];
X=[22];
False.
我想将所有这些结果放在一个列表中,因此会发生类似以下的情况。
?-another_foo(X,[1,2,3]).
X=[[11],[22]].
another_foo 会以某种方式使用 foo 创建一个包含 foo 的所有结果的列表。
我只是不知道怎么办。
使用内置谓词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).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)