1

リスト内にリストが存在する可能性がある場合、リスト内の要素の総数をどのように計算しますか? (すべてのリストの長さを合計します)

?- sumOfLists([[1,2],[],[a,s,d],[a,1,3],[1]],S).
    S = 9
4

3 に答える 3

2

これが私が知っているより短い方法で、flatten /2を使用しています。

sumOfLists(Ls, S) :-
  flatten(Ls, Flat),
  length(Flat, S).
于 2013-02-28T11:35:18.063 に答える
0

まず、を使用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).
于 2013-02-28T11:04:51.940 に答える