> Erlang中文手册 > splitwith/2 基于一个断言把一个列表分成两个列表

lists:splitwith/2

基于一个断言把一个列表分成两个列表

用法:

splitwith(Pred, List) -> {List1, List2}

内部实现:

-spec splitwith(Pred, List) -> {List1, List2} when
      Pred :: fun((T) -> boolean()),
      List :: [T],
      List1 :: [T],
      List2 :: [T],
      T :: term().

splitwith(Pred, List) when is_function(Pred, 1) ->
    splitwith(Pred, List, []).

splitwith(Pred, [Hd|Tail], Taken) ->
    case Pred(Hd) of
	true -> splitwith(Pred, Tail, [Hd|Taken]);
	false -> {reverse(Taken), [Hd|Tail]}
    end;
splitwith(Pred, [], Taken) when is_function(Pred, 1) ->
    {reverse(Taken),[]}.

基于一个断言 Pred 把一个列表分成 List1 和 List1 这两个列表,List1 里的元素是由在 Pred 函数调用返回 true 的组成,List2 则是直到断言判断遇到一个 false,List 剩下的元素

lists:splitwith(fun(E) -> E