나는 프롤로그로 시작하는거야, 그리고 난 혼란 조금 해요 ... 나는 간단한 프로그램이 SWI - 프롤로그 : 합계-목록
: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의 버전과 의미가 다르지 않습니다. –