我正在尝试计算列表中交替元素的总和,但它没有按照应有的方式工作,我无法找到问题...请帮助我。
如果我有列表:[1,2,3,4]它应该返回1-2 + 3-4 = -2。
这是我的代码:
poz(E,[],0):-!.
poz(E,L,N):-poz_aux(E,L,N,1).
poz_aux(E,[E|_],N,N).
poz_aux(E,[_|T],N,K):-
K1 is K + 1,
poz_aux(E,T,N,K1).
suma([],0).
suma(L,S):-suma_aux(L,S,L,0).
suma_aux([],S,_,S).
suma_aux([H|T],S,L,S1):-
poz(H,L,P),
P mod 2 = 1,
S2 is S1 + H,
suma_aux(T,S,L,S2).
suma_aux([H|T],S,L,S1):-
poz(H,L,P),
P mod 2 = 0,
S2 is S1 - H,
suma_aux(T,S,L,S2).
答案 0 :(得分:2)
这些事情可以用程序结构更好地表达出来:
list_altsum([], 0).
list_altsum([A], S) :-
S is A.
list_altsum([A,B|ABs],S0) :-
list_alsum(ABs, S1),
S0 is A-B+S1.
可替换地:
list_altsum(Xs, S) :-
list_altsum(Xs, 1, S).
list_altsum([], _, 0).
list_altsum([A|As], F0, S0) :-
F1 is -F0,
list_altsum(As, F1, S1),
S0 is F0*A+S1.