Prolog成员+谓词调用解释

时间:2018-05-19 17:09:21

标签: prolog member

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

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

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

1 个答案:

答案 0 :(得分:1)

Prolog中的谓词呼叫不要"返回false / true&#34 ;;他们成功(可选择绑定变量)或失败。他们可以反复取得成功。

您问题的答案取决于您致电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绑定到bsomeCalculations(b)被调用。等

  3. 在第4步(使用d)之后,member调用失败,因此predicate调用也会执行(someCalculations无法调用)。