2013-02-28 109 views
1

如何計算列表中列表中元素的總數? (加長度所有列表一起)Prolog - 如何計算元素總數

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

遞歸找到所有子列表的長度,並添加呢? – 2013-02-28 07:21:47

回答

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). 
2

這裏是較短的方式,我知道,使用flatten/2:

sumOfLists(Ls, S) :- 
    flatten(Ls, Flat), 
    length(Flat, S). 
1

你可以做到這一點,不要扁平化,也不要使用maplist。

這裏是我的建議:

%element atomic? -> count 
deep_len([H|T],N) :- atomic(H), deep_len(T, M), N is M + 1. 

%element list? -> recurse for head and tail and sum results 
deep_len([H|T],N) :- is_list(H), deep_len(H, Sum1), deep_len(T, Sum2), N is Sum1+Sum2.