如何遍历谓词中的所有事实?

时间:2015-11-23 02:07:46

标签: prolog

假设我有一个数据库:

holds(p1,b1).
holds(p2,b1).
holds(p3,b1).

我希望有一个谓词,可以检查数据库中的所有保留语句,而不必输入hold(X,b1)3次,以防万一我不知道数据库中有多少个。

2 个答案:

答案 0 :(得分:2)

forall / 2应该适合您的需求

?- forall(holds(X,b1), doSomething(X)).

注意doSomething(X)应该成功。如果您的Prolog没有它,那么实现(来自SWI-prolog库)非常紧凑:

%%  forall(+Condition, +Action)
%
%   True if Action if true for all variable bindings for which Condition
%   if true.

forall(Cond, Action) :-
    \+ (Cond, \+ Action).

答案 1 :(得分:0)

您可以使用findall/3查找满足holds(X,b1)的所有值;那么你可以浏览一下这个清单,为每一个做任何你需要做的事情。