2013-02-28 5 views
1

목록에 목록이있을 수있는 경우 목록의 총 요소 수는 어떻게 계산합니까? 다음, 그것의 길이에 의해 각 목록을 대체 할 maplist를 사용프롤로그 - 총 요소 수를 계산하는 방법

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

재귀 적으로 모든 하위 목록의 길이를 찾아 추가 : 여기

내 제안인가? –

답변

0

먼저 (모두 함께리스트의 길이를 추가) 길이를 요약. 사용

다음
sumOfLists(L, S) :- maplist(length, L, Lengths), sum(Lengths, S). 
2

내가 아는 짧은 방법입니다 flatten/2 :

sum(L, S) :- sum(L, S, 0). 
sum([], Acc, Acc). 
sum([X|Xs], Sum, Acc) :- 
    Acc1 is Acc + X, 
    sum(Xs, Sum, Acc1). 

그냥 귀결이 하나의 같은 sum 술어를 사용

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

평평하게하지 않고 매플리스트를 사용하지 않고이 작업을 수행 할 수 있습니다.

%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. 
관련 문제