リスト内にリストが存在する可能性がある場合、リスト内の要素の総数をどのように計算しますか? (すべてのリストの長さを合計します)
?- sumOfLists([[1,2],[],[a,s,d],[a,1,3],[1]],S).
S = 9
リスト内にリストが存在する可能性がある場合、リスト内の要素の総数をどのように計算しますか? (すべてのリストの長さを合計します)
?- sumOfLists([[1,2],[],[a,s,d],[a,1,3],[1]],S).
S = 9
これが私が知っているより短い方法で、flatten /2を使用しています。
sumOfLists(Ls, S) :-
flatten(Ls, Flat),
length(Flat, S).
まず、を使用maplist
して各リストをその長さに置き換え、次に長さを合計します。
sum
このような述語を使用する:
sum(L, S) :- sum(L, S, 0).
sum([], Acc, Acc).
sum([X|Xs], Sum, Acc) :-
Acc1 is Acc + X,
sum(Xs, Sum, Acc1).
要約すると、次のようになります。
sumOfLists(L, S) :- maplist(length, L, Lengths), sum(Lengths, S).