我很难理解成员+谓词调用。例如,当我有这样的谓词:
predicate(List) :- member(X, List), someCalculations(X).
让我们假设谓词someCalculations(X)
有时会返回true,有时会返回false,或者只是false / true。它会在返回的第一个true或者List中的所有X
成员返回true时停止吗?什么时候它会失败,什么时候遇到失败,或者当所有列表成员都失败了?
答案 0 :(得分:1)
Prolog中的谓词呼叫不要"返回false / true&#34 ;;他们成功(可选择绑定变量)或失败。他们可以反复取得成功。
您问题的答案取决于您致电predicate
的方式。假设它本身就是一个目标,并且你传递一个包含没有未绑定变量的列表,例如?- predicate([a,b,c,d])
,这将会发生:
member(X,[a,b,c,d])
首先以X=a
成功。然后调用someCalculations(a)
。
如果成功,predicate([a,b,c,d])
调用也会成功,不会绑定任何变量。您可以停止,或者您可以在这种情况下要求更多结果......
如果失败,Prolog会回溯并......
... X
绑定到b
,someCalculations(b)
被调用。等
在第4步(使用d
)之后,member
调用失败,因此predicate
调用也会执行(someCalculations
无法调用)。