lists:split/2
把一个列表分成两个列表
用法:
split(N, List1) -> {List2, List3}
内部实现:
-spec split(N, List1) -> {List2, List3} when
N :: non_neg_integer(),
List1 :: [T],
List2 :: [T],
List3 :: [T],
T :: term().
split(N, List) when is_integer(N), N >= 0, is_list(List) ->
case split(N, List, []) of
{_, _} = Result -> Result;
Fault when is_atom(Fault) ->
erlang:error(Fault, [N,List])
end;
split(N, List) ->
erlang:error(badarg, [N,List]).
split(0, L, R) ->
{lists:reverse(R, []), L};
split(N, [H|T], R) ->
split(N-1, T, [H|R]);
split(_, [], _) ->
badarg.
把列表 List1 以第 N 个元素为分离点,分成 List2 和 List3 这 2 个列表,列表 List2 包含列表 List1 前 N 个元素,列表 List3 则是剩下的。
lists:split(3, [a, b, c, d, e]).