Pie*_*one 5 prolog successor-arithmetics prolog-cut
让我们考虑下面的Prolog程序(来自"The 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).
Run Code Online (Sandbox Code Playgroud)
和查询:
?- plus(s(s(s(0))), s(0), Z).
Run Code Online (Sandbox Code Playgroud)
SICStus和SWI都会产生预期的Z = s(s(s(s(0))))答案,但会询问用户下一个答案(正确no/ false答案).但是,我无法理解为什么在找到唯一目标后SLD树中存在一个开放分支.我尝试在SICStus和SWI下调试,但我还不能解释结果.我只能说,据我所知,两者都是回溯plus(s(s(s(0))), 0, _Z2).有人可以帮我理解这种行为吗?