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]) .
这是来自之前发布的帖子而不是我的代码。
有人可以解释这里发生的事情:
flatten([[_|_]=H|T],Acc)
[[_|_]=H|T]
是我无法获得的部分。
(另外这是在另一页,但由于代表我无法对其进行评论。)
答案 0 :(得分:5)
[[_|_]=H|T]
匹配非空列表,其第一个元素也是非空列表。
让我们把它分开:
[ H|T] %% match the Head and Tail of a list
[_|_] %% match the head and tail of the inner list, ignoring the values
= %% assign the matched inner list to the variable H
这是Erlang中的常见模式。列表要么具有零个元素,因此匹配[]
,或者它至少有一个元素,在这种情况下,您可以使用[H|T]
提取第一个元素和列表的其余部分。 (该匹配也可以写成[H] ++ T
。)