[erlang-questions] Weird lists:dropwhile/2 behavior?
Richard A. O'Keefe
<>
Mon Feb 22 01:51:28 CET 2016
On 22/02/16 1:39 am, fxmy wang wrote:
K = fun (E) -> E > 3 end.
lists:dropwhile(K, [1,2,3,4,5]).
What should we expect that to do?
dropwhile(Test, List) says "throw away the longest prefix
of List such that every element of the prefix satisfies the
Test." What is the longest prefix of [1,2,3,4,5] such that
every element is greater than 3? The empty list. So we
expect the answer [1,2,3,4,5], and indeed, that's what we get.
lists:filter(K, [3,1,4,2,5])
will of course answer [4,5], because filter is defined to look
at all the elements, not just a prefix.
Without looking at the source code, it will be something like
dropwhile(F, L = [X|Xs]) ->
case F(X)
of true -> dropwhile(F, Xs)
; false -> L
end;
dropwhile(_, L) ->
L.
More information about the erlang-questions
mailing list