假设我有一个数据库:
holds(p1,b1).
holds(p2,b1).
holds(p3,b1).
我想要一个谓词,它可以检查数据库中的所有保留语句,而无需输入 Hold(X,b1) 3 次,以防我事先不知道数据库中有多少条语句。
最佳答案
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).
关于prolog - 如何迭代谓词中的所有事实?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862729/