목록에 목록이있을 수있는 경우 목록의 총 요소 수는 어떻게 계산합니까? 다음, 그것의 길이에 의해 각 목록을 대체 할 maplist
를 사용프롤로그 - 총 요소 수를 계산하는 방법
?- sumOfLists([[1,2],[],[a,s,d],[a,1,3],[1]],S).
S = 9
목록에 목록이있을 수있는 경우 목록의 총 요소 수는 어떻게 계산합니까? 다음, 그것의 길이에 의해 각 목록을 대체 할 maplist
를 사용프롤로그 - 총 요소 수를 계산하는 방법
?- sumOfLists([[1,2],[],[a,s,d],[a,1,3],[1]],S).
S = 9
먼저 (모두 함께리스트의 길이를 추가) 길이를 요약. 사용
다음sumOfLists(L, S) :- maplist(length, L, Lengths), sum(Lengths, S).
내가 아는 짧은 방법입니다 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).
평평하게하지 않고 매플리스트를 사용하지 않고이 작업을 수행 할 수 있습니다.
%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.
재귀 적으로 모든 하위 목록의 길이를 찾아 추가 : 여기
내 제안인가? –