Prolog成员+谓词调用解释

Prolog member + predicate call explained

我很难理解成员+谓词调用。例如,当我有这样的谓词时:

predicate(List) :- member(X, List), someCalculations(X).

让我们假设谓词 someCalculations(X) 有时 return 为真有时为假,或者只是 false/true。它会在第一个 returned 为真时停止,还是在列表 return 中的所有 X 成员为真时停止?什么时候会失败,遇到失败一次,或者所有List成员都失败?

Prolog 中的谓词调用不会 "return false/true";它们成功(可选绑定变量)或失败。而且他们可以反复成功。

您问题的答案取决于您如何调用 predicate。假设它本身就是一个目标,并且您向它传递一个不包含未绑定变量的列表,例如?- predicate([a,b,c,d]),这将发生:

  1. member(X,[a,b,c,d]) 先用 X=a 成功。然后 someCalculations(a) 被调用。

    1. 如果成功,predicate([a,b,c,d])调用也会成功,不绑定任何变量。您可以停止,或者您可以要求更多结果,在这种情况下...

    2. 如果失败,Prolog 回溯并...

  2. ... X 绑定到 b,调用 someCalculations(b)。等等

在步骤 4 之后(使用 d),member 调用失败,因此 predicate 调用也失败(someCalculations 未被调用)。