如何計算列表中列表中元素的總數? (加長度所有列表一起)Prolog - 如何計算元素總數
?- sumOfLists([[1,2],[],[a,s,d],[a,1,3],[1]],S).
S = 9
如何計算列表中列表中元素的總數? (加長度所有列表一起)Prolog - 如何計算元素總數
?- sumOfLists([[1,2],[],[a,s,d],[a,1,3],[1]],S).
S = 9
首先,使用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).
這裏是較短的方式,我知道,使用flatten/2:
sumOfLists(Ls, S) :-
flatten(Ls, Flat),
length(Flat, S).
你可以做到這一點,不要扁平化,也不要使用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.
遞歸找到所有子列表的長度,並添加呢? – 2013-02-28 07:21:47