Prolog 检查是否存在任何解决方案

Prolog 检查是否存在任何解决方案,prolog,Prolog,我在表单中有一些代码 plan([],_). plan([ Item | RemainingItems ], Groups) :- doStuff(Groups, Item, UpdatedGroups), rulesObeyed(UpdatedGroups), plan(RemainingItems, UpdatedGroups). doStuff只有一个可能的子树,但是RuleSoBeed可以根据组的数量拥有无限的子树,因为可以通过多种方式遵守规则。 这导致该计划反复返回相同的

我在表单中有一些代码

plan([],_).
plan([ Item | RemainingItems ], Groups) :-
  doStuff(Groups, Item, UpdatedGroups),
  rulesObeyed(UpdatedGroups),
  plan(RemainingItems, UpdatedGroups).
doStuff只有一个可能的子树,但是RuleSoBeed可以根据组的数量拥有无限的子树,因为可以通过多种方式遵守规则。 这导致该计划反复返回相同的解决方案

有什么方法可以这样说吗

solution_exists(rulesObeyed(UpdatedGroups))

因此,它没有考虑所有可能的规则解决方案。

解决方案是使用
一次/1
-或
\+\+
作为错误发布。

在我询问后5秒,我发现一次/1…-我是否正确理解了它,它检查是否存在解决方案?是的,您正在寻找的是“一次”。您可以使用
\+\+Goal
一次(Goal)
。只要
Goal
是一个基本术语,就没有(逻辑)区别。