在列表中添加整数

时间:2011-10-11 23:42:40

标签: prolog

出于某种原因,这不起作用。我正进入(状态: 错误:是/ 2:参数没有充分实例化

1 add_list([]).
2 add_list([H|T]):-
3                 Sum2 is Sum1 + H,
4                 add_list(T).

我正在尝试添加列表的内容(仅包含数字)。

3 个答案:

答案 0 :(得分:3)

我不确定你要做什么。但是如果你试图计算总和,就会这样(将名称改为list_sum,因为add_list没有任何意义):

list_sum([], 0).
list_sum([H|T], Sum):-
    list_sum(T, SubSum),
    Sum is SubSum + H.

答案 1 :(得分:1)

你可以通过foldl获得“功能性思维”:

foldl(_P, [], V, V).

foldl(P, [H|T], V1, VF) :-
    call(P, H, V1, V2),
    foldl(P, T, V2, VF).


sum_list(L, S) :-
    foldl(add, L, 0, S).


add(X, Y, Z) :-
    Z is X+Y.

答案 2 :(得分:0)

或者您也可以使用累加器(优点是,它是尾递归的,因此可以进行优化)

list_sum(L,R) :- list_sum(L,0,R).   
list_sum([],A,A). 
list_sum([H|T],A,R) :- A1 is A + H, list_sum(T,A1,R).