假设我有一个数据库:
holds(p1,b1).
holds(p2,b1).
holds(p3,b1).
我希望有一个谓词,可以检查数据库中的所有保留语句,而不必输入hold(X,b1)3次,以防万一我不知道数据库中有多少个。
答案 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)
的所有值;那么你可以浏览一下这个清单,为每一个做任何你需要做的事情。