出于某种原因,这不起作用。我正进入(状态: 错误:是/ 2:参数没有充分实例化
1 add_list([]).
2 add_list([H|T]):-
3 Sum2 is Sum1 + H,
4 add_list(T).
我正在尝试添加列表的内容(仅包含数字)。
答案 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).