我有一个列表,其中包含多个列表。我想将这些列表的总和放到另一个列表中。
full_list([[12,13,14],[5,7,9],[1,12,72]])。 %这是我的原始列表
我想获得如下输出, L = [39,21,85]。
有人请用prolog向我解释如何做到这一点。 提前谢谢!
答案 0 :(得分:3)
有sum_list / 2,可以随时使用内置:
full_list(I, L) :-
maplist(sum_list, I, L).
试验:
?- full_list([[12,13,14],[5,7,9],[1,12,72]], L).
L = [39, 21, 85].
答案 1 :(得分:2)
功能设计,与SWI-Prolog一起使用
:- use_module(library(lambda)).
sum_list(L, R) :-
maplist(\X^foldl(\T^U^V^(V is T+U), X, 0), L, R).
lambda.pl可以在这里找到:http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/lambda.pl
答案 2 :(得分:0)
使用像这样的列表和谓词:
listSum(nil,N,N);
listSum([H|Tail],N,Res) :- Acc is N+H, listSum(Tail,Acc,Res)
sumofSubLists([L1,L2,L3],[R1,R2,R3]):-
listSum(L1,0,R1),
listSum(L2,0,R2),
listSum(L3,0,R3)
致电
sumofSubLists([[12,13,14],[5,7,9],[1,12,72]], ResultList)
应该给出结果。 这可以更有效地完成...... 希望它有所帮助
如果您想使用任意数量的列表来执行此操作,则需要定义一些新谓词:
AddElement将新元素添加到列表中:
addElement(X,[],[X]);
addElement(X,L,[X|L]);
另一个追加名单:
append([],X,X);
append([T|Q1],X,[T|Q2]) :- append(Q1,X,Q2);
一个递归的列表:
sumSubListsRec(nil,AccList,ResultList):- ResultList = AccList;
sumSubListsRec([HeadList| Tail], AccList,ResultList) :-
listSum(HeadList,0,Tmp),
append(AccList,[Tmp],T),
sumSubListsRec(Tail,T,ResultList);
现在您可以使用任意数量的列表调用它。