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 < 3 end, [1, 2, 3, 4, 5]).