如果返回两个或多个结果,则谓词成功

Joh*_*ian 4 prolog

如何实现rule1成功iff rule2返回两个或更多结果?

rule1(X) :-
    rule2(X, _).
Run Code Online (Sandbox Code Playgroud)

如何计算结果,然后设置何时成功的最小值?

fal*_*lse 5

我如何计算结果,然后设置最小值何时为真?

目前尚不清楚结果的含义.所以我会做一些猜测.结果可能是:

一个办法.例如,目标member(X,[1,2,1])有两个解决方案.不是三个.在这种情况下,请考虑使用任一setof/3或类似的谓词.无论如何,setof/3在解决您遇到的问题之前,您应该先了解.

一个答案.目标member(X,[1,2,1])有三个答案.目标member(X,[Y,Z])有两个答案,但无限多的解决方案.

因此,如果您想确保至少有一定数量的答案,请定义:

at_least(Goal, N) :-
   \+ \+ call_nth(Goal, N).

与call_nth/2 在另一SO-答案定义.

请注意,其他SO-answers不正确:它们要么不终止,要么产生意外的实例化.

  • 谢谢你解释解决方案和答案之间的区别. (2认同)
  • @chac:这种区别是[tag:clpfd]的关键! (2认同)