由于某种原因,这不起作用。我越来越: 错误:是/ 2:论点是没有充分实例化在列表中添加整数
1 add_list([]).
2 add_list([H|T]):-
3 Sum2 is Sum1 + H,
4 add_list(T).
我想添加一个列表(仅包含数字)的内容。
由于某种原因,这不起作用。我越来越: 错误:是/ 2:论点是没有充分实例化在列表中添加整数
1 add_list([]).
2 add_list([H|T]):-
3 Sum2 is Sum1 + H,
4 add_list(T).
我想添加一个列表(仅包含数字)的内容。
我不确定你在做什么。但是,如果你正在尝试calc下总和会是这个样子(更名为list_sum作为add_list没有任何意义):
list_sum([], 0).
list_sum([H|T], Sum):-
list_sum(T, SubSum),
Sum is SubSum + H.
另外,您也可以使用蓄能器(优点是,它是尾递归,因此可以优化)
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).
你可以有一个“functionnal记”与与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.
s(X)以获得更高的顺序! – repeat
谢谢,这是我一直想把你了。但我认为我对序言中的递归有点困惑。 list_sum([],0)。这是基本情况吗?并且因为列表中没有剩余元素而实现了0? –
拳头线是“事实”。第二行是“规则”。你必须达到规则的事实。我知道这有点奇怪,但你应该阅读更多的序言(例如http://en.wikipedia.org/wiki/Prolog) –