我覺得很unstraightforward,但我認爲我得到了它的要點,請確認我是否在錯誤與否。我們如何跟蹤序言中的遞歸算法?
append([],L,L).
append([H|T],L2,[H|L3]) :- append(T,L2,L3).
下面是對規則和跟蹤的查詢。
?- append([a,b,c],[1,2,3],X)
append([a, b, c], [1, 2, 3], _G518)
append([b, c], [1, 2, 3], _G587)
append([c], [1, 2, 3], _G590)
append([], [1, 2, 3], _G593)
append([], [1, 2, 3], [1, 2, 3])
append([c], [1, 2, 3], [c, 1, 2, 3])
append([b, c], [1, 2, 3], [b, c, 1, 2, 3])
append([a, b, c], [1, 2, 3], [a, b, c, 1, 2, 3])
X = [a, b, c, 1, 2, 3]
yes
追加(T,L2,L3), 「遞歸」 向前,削弱了列表的大小[H | T],然後追加([H | T],L2,[H | L3] )向後「遞歸」,增加列表L3的大小。所以,如果我理解正確,規則總是「向後遞歸」,其條件「遞歸」向前,我是否正確?此外,是什麼使算法向後追加「遞歸」?它追加([],L,L)?或者它在到達基本情況後總是「逆轉」回去?
的令人困惑的事情是,只有簡單的序言遞歸「遞歸」邁進。如果我沒有誤認爲祖先(E,F)只是「遞歸」向前。
什麼是'祖先/ 2'? –