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])
,这将发生:
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
未被调用)。
我很难理解成员+谓词调用。例如,当我有这样的谓词时:
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])
,这将发生:
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
未被调用)。