我開始與Prolog的,我有點糊塗了......SWI-Prolog的:總名錄
我有一個簡單的程序:
sum(0, []).
sum(Total, [Head|Tail]) :- sum(Sum, Tail), Total is Head + Sum.
當我調試,我可以看到Prolog首先用Head和Tail分割列表,所以結果是0 +空列表,並且在它開始總結數字並將其添加到列表之後。
有人可以解釋爲什麼它不會先到Total is Head + Sum.
然後再將列表分割爲頭部和尾部?
編輯:這裏是跟蹤:
[trace] ?- sum(X, [1,2,3]).
Call: (6) sum(_G345, [1, 2, 3]) ? creep
Call: (7) sum(_G424, [2, 3]) ? creep
Call: (8) sum(_G424, [3]) ? creep
Call: (9) sum(_G424, []) ? creep
Exit: (9) sum(0, []) ? creep
Call: (9) _G430 is 3+0 ? creep
Exit: (9) 3 is 3+0 ? creep
Exit: (8) sum(3, [3]) ? creep
Call: (8) _G433 is 2+3 ? creep
xit: (8) 5 is 2+3 ? creep
Exit: (7) sum(5, [2, 3]) ? creep
Call: (7) _G345 is 1+5 ? creep
Exit: (7) 6 is 1+5 ? creep
Exit: (6) sum(6, [1, 2, 3]) ? creep
X = 6.
這與Dmitri的版本沒有任何意義上的不同。 – 2013-06-04 17:08:40