, :
addup([], 0).
addup([FirstNumber | RestOfList], Total) :-
addup(RestOfList, TotalOfRest),
Total is FirstNumber + TotalOfRest.
TotalOfRest
. , TotalRest
, .
trace
, :
[trace] ?- addup([3, 5, 7], Total).
Call: (7) addup([3, 5, 7], _Total)
Call: (8) addup([5, 7], _TotalOfRest1)
Call: (9) addup([7], _TotalOfRest2)
Call: (10) addup([], _TotalOfRest3)
Exit: (10) addup([], 0)
^ Call: (10) _TotalOfRest2 is 7+0
^ Exit: (10) 7 is 7+0
Exit: (9) addup([7], 7)
^ Call: (9) _TotalOfRest1 is 5+7
^ Exit: (9) 12 is 5+7
Exit: (8) addup([5, 7], 12)
^ Call: (8) _Total is 3+12
^ Exit: (8) 15 is 3+12
Exit: (7) addup([3, 5, 7], 15)
Total = 15.
, , , _TotalOfRest1
. _TotalOfRest3
. _TotalOfRest3 = 0
0
. , : Total is FirstNumber + TotalOfRest.
. , Total
( TotalOfRest
FirstNumber
). . , a Total
, , _TotalOfRest2
.
, :
addup([3, 5, 7], Total) :-
% FirstNumber = 3
% RestOfList = [5, 7]
% Total = Total
addup([5,7], _TotalOfRest1) :-
% FirstNumber = 5
% RestOfList = [7]
% Total = _TotalOfRest1
addup([7], _TotalOfRest2) :-
% FirstNumber = 7
% RestOfList = []
% Total = _TotalOfRest2
addup([],_TotalOfRest3),
% resolved to _TotalOfRest3 = 0
Total is 7 + 0.
% resolved to Total = 7
% resolved to _TotalOfRest2 = 7
Total is 5 + 7.
% resolved to Total = 12
% resolved to _TotalOfRest1 = 12
Total is 3 + 12.
% resolved to Total = 15
% resolved tot Total = 15
, , , .