いくつかのリストで構成されるリストがあります。これらのリストの合計を別のリストに入れたいと思います。
full_list([[12,13,14],[5,7,9],[1,12,72]])。%これは私のオリジナルのリストです
以下のような出力を取得したいと思います.L=[39,21,85].
誰かがプロローグを使用してこれを行う方法を説明してください。前もって感謝します!
いくつかのリストで構成されるリストがあります。これらのリストの合計を別のリストに入れたいと思います。
full_list([[12,13,14],[5,7,9],[1,12,72]])。%これは私のオリジナルのリストです
以下のような出力を取得したいと思います.L=[39,21,85].
誰かがプロローグを使用してこれを行う方法を説明してください。前もって感謝します!
すぐに使用できる組み込みの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].
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
次のようなリストサム述語を使用します。
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);
これで、任意の数のリストで呼び出すことができます。