prolog - 如何迭代谓词中的所有事实?

标签 prolog

假设我有一个数据库:

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/

相关文章:

Prolog 依赖项 : include vs ensure_loaded

Prolog:从 DCG 生成查询

Prolog - 删除非唯一元素

Prolog - 功能术语与谓词

prolog - 在 Prolog 中内存目标

prolog - 如何更改序言中的 'write_options' 来打印长列表?

Prolog - 参数没有充分实例化 - 骑士/棋盘

prolog - 在 Prolog 中解决逻辑难题

list - Prolog: between/3 最后有一个列表

prolog - 为什么我的规则不能求解简单代数方程中的 X?