gpt4 book ai didi

list - 在 Erlang 中展平嵌套列表的列表

转载 作者:行者123 更新时间:2023-12-04 13:03:45 25 4
gpt4 key购买 nike

我正在做 Erlang Programming 中的练习。

问题是

Write a function that, given a list of nested lists, will return a flat list.

Example: flatten([[1,[2,[3],[]]], [[[4]]], [5,6]]) ⇒ [1,2,3,4,5,6].



提示:使用 concatenate解决 flatten .

这是我的 concatenate功能
%% concatenate([[1,2,3], [], [4, five]]) ⇒ [1,2,3,4,five].
concatenate([X|Xs]) -> concat(X, Xs, []).
concat([X|Xs], T, L) -> concat(Xs, T, [X|L]);
concat([], [X|Xs], L) -> concat(X, Xs, L);
concat([], [], L) -> reverse(L).

我真的很想知道一种优雅的实现方式 flatten .我花了几个小时来解决这个练习。

更新 : 我忘记了最重要的先决条件。是否可以仅通过递归和模式匹配来解决这个问题?

最佳答案

我会尝试这种方式

flatten(X) -> lists:reverse(flatten(X,[])).

flatten([],Acc) -> Acc;
flatten([H|T],Acc) when is_list(H) -> flatten(T, flatten(H,Acc));
flatten([H|T],Acc) -> flatten(T,[H|Acc]).

测试
my:flatten([[1,[2,[3],[]]], [[[4]]], [5,6]]).
[1,2,3,4,5,6]

更新:或者这样,没有保护和反向,只有递归调用和模式匹配。
flatten(X)               -> flatten(X,[]).

flatten([],Acc) -> Acc;
flatten([[]|T],Acc) -> flatten(T, Acc);
flatten([[_|_]=H|T],Acc) -> flatten(T, flatten(H,Acc));
flatten([H|T],Acc) -> flatten(T,Acc++[H]) .

关于list - 在 Erlang 中展平嵌套列表的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com