2014-11-22 51 views
1

我想计算一个列表中交替元素的总和,但它不工作,它应该和我找不到问题......请帮助我。一个列表交替元素的总和

如果我有清单:[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). 

回答

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. 
相关问题