我怀疑如何添加列表的数量,包括嵌套列表中的列表,例如:
test:nestedSum([1, [2, 3], [4, 5, 6], 7]).
? 28
Run Code Online (Sandbox Code Playgroud)
到目前为止我得到了这个:
nestedSum(L) -> nestedSum(L, 0).
nestedSum([H|T], Acc) ->
nestedSum(T, H + Acc);
nestedSum([], Acc) ->
Acc.
Run Code Online (Sandbox Code Playgroud)
哪个只有作用:
test:nestedSum([1, 2, 3, 4, 5, 6, 7]).
? 28
Run Code Online (Sandbox Code Playgroud)
但它并没有对嵌套总和中的数字求和,我该怎么做?
nestedSum/2当列表的头部是列表时,您只需要为该函数添加一个子句:
% Add this before the two existing clauses.
nestedSum([H|T], Acc) when is_list(H) ->
nestedSum(T, nestedSum(H) + Acc);
Run Code Online (Sandbox Code Playgroud)
有了这个,您的函数现在可以处理任何嵌套列表:
1> a:nestedSum([1, [2, 3], [4, 5, 6], 7]).
28
2> a:nestedSum([1, [2, 3], [4, 5, 6], 7, [8, [[[9, [[[[[[10]]]]]]]]]]]).
55
Run Code Online (Sandbox Code Playgroud)
您可以使用列表:展平:
nestedSum(L) -> nestedSum(lists:flatten(L), 0).
.
.
Run Code Online (Sandbox Code Playgroud)
减少列表通常是一个单一的:
lists:foldl(fun(X,Sum) -> X + Sum end, 0, lists:flatten([1, [2, 3], [4, 5, 6], 7])).
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |