SWI-Prolog,版本 6.6.6。
考虑以下事实:
p(a, a).
p(a, b).
结果如下:
?- p(a, a).
true ;
false.
但是如果我稍微改变一下数据:
p(a, a).
p(b, a).
我得到一个稍微不同的答案......
?- p(a, a).
true.
似乎没有出现第二种情况的回溯,因为问题中谓词的第一个参数没有与其他子句统一。
然而,人们希望true ; false.
对每种情况都有答案:引擎将尝试第一个谓词子句(结果为true
),然后回溯并寻找相同谓词的其他子句(结果为false
)。在第二种情况下,它是一种捷径吗?
这是(有点)标准行为 - 即在编写序言规则时应该考虑 - 还是纯粹是特定于实现的?