我不认为我了解递归在序言中是如何工作的递归在序言
下面的代码(幂函数)
pow(_,0,1).
pow(X,Y,Z) :-
Y1 is Y - 1 ,
pow(X,Y1,Z1) ,
Z is Z1*X
.
创建以下跟踪:
[trace] ?- pow(2,2,X).
Call: (6) pow(2, 2, _G368) ? creep
Call: (7) _G444 is 2+ -1 ? creep
Exit: (7) 1 is 2+ -1 ? creep
Call: (7) pow(2, 1, _G443) ? creep
Call: (8) _G447 is 1+ -1 ? creep
Exit: (8) 0 is 1+ -1 ? creep
Call: (8) pow(2, 0, _G446) ? creep
Exit: (8) pow(2, 0, 1) ? creep
Call: (8) _G450 is 1*2 ? creep
Exit: (8) 2 is 1*2 ? creep
Exit: (7) pow(2, 1, 2) ? creep
Call: (7) _G368 is 2*2 ? creep
Exit: (7) 4 is 2*2 ? creep
Exit: (6) pow(2, 2, 4) ? creep
我不明白最后的状态如何:'Z是Z1 * X'的作品。这个函数何时被调用?当达到基本情况时? 基础案例如何被调用?
感谢
在第一条顺便说一句,你的战俘丢失晋级。写入它的方式会陷入无限递归中,如果您指示prolog在找到第一个解决方案后尝试找到更多解决方案。 –