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
是一个基本术语,就没有(逻辑)区别。