我不認爲我瞭解遞歸在序言中是如何工作的遞歸在序言
下面的代碼(冪函數)
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在找到第一個解決方案後嘗試找到更多解決方案。 –