列表的交替元素的总和

时间:2014-11-22 11:52:18

标签: prolog

我正在尝试计算列表中交替元素的总和,但它没有按照应有的方式工作,我无法找到问题...请帮助我。

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

1 个答案:

答案 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.