【发布时间】:2012-10-31 16:43:38
【问题描述】:
让我们考虑以下 Prolog 程序(来自“The Art of Prolog”):
natural_number(0).
natural_number(s(X)) :- natural_number(X).
plus(X, 0, X) :- natural_number(X).
plus(X, s(Y), s(Z)) :- plus(X, Y, Z).
和查询:
?- plus(s(s(s(0))), s(0), Z).
SICStus 和 SWI 都产生预期的 Z = s(s(s(s(0)))) 答案,但向用户查询下一个答案(正确的 no/false 答案)。但是,我无法理解为什么在找到唯一目标后 SLD 树中有一个开放的分支。我尝试在 SICStus 和 SWI 下进行调试,但我还不能真正解释结果。我只能说,据我所知,两者都回溯到plus(s(s(s(0))), 0, _Z2)。有人可以帮我理解这种行为吗?
【问题讨论】:
-
您将
plus/3的第一个和第二个参数与Prolog艺术的程序3.3进行了比较。但是就这样吧……
标签: prolog successor-arithmetics prolog-cut