lists:takewhile/2
基于一个断言提取一个列表
用法:
takewhile(Pred, List1) -> List2
内部实现:
-spec takewhile(Pred, List1) -> List2 when Pred :: fun((Elem :: T) -> boolean()), List1 :: [T], List2 :: [T], T :: term(). takewhile(Pred, [Hd|Tail]) -> case Pred(Hd) of true -> [Hd|takewhile(Pred, Tail)]; false -> [] end; takewhile(Pred, []) when is_function(Pred, 1) -> [].
把列表 List1 里的每个元素依次被断言函数 Pred 调用执行,并返回一个列表 List2。如果元素在 Pred 函数中返回的结果为 true,则把该元素加入到返回列表,直到遇到返回值是 false,则结束断言 Pred 调用
lists:takewhile(fun(E) -> E < 3 end, [1, 2, 3, 4, 5]).