[erlang-questions] Smart way to trim a binary?
Ulf Wiger
ulf.wiger@REDACTED
Wed Jun 24 14:40:23 CEST 2009
Kostis Sagonas wrote:
> Christian wrote:
>> I prefer this approach for implementing is_whitespace. Saves a few
>> lines and is quite readable. If I'm lucky the compiler is sufficiently
>> smart to optimize it into submission.
>>
>> is_whitespace(C) -> lists:member(C, "\s\t\r\n").
>
> Actually, the compiler is quite smart NOT to turn it into the form you
> are suggesting because the version with lists:member/2 is linear on the
> length of the list while the version with many clauses uses pattern
> matching compilation to access the proper clause in sub-linear time.
The way I understood the suggestion, it was that the
compiler could notice that the list is hard-coded and
replace the function call with pattern-matching
compilation.
I can imagine that this sort of optimization would rank
fairly low on the list of worthy candidates though.
It wouldn't be too hard to write a parse transform that
does it, if you want to use it extensively.
BTW, regarding the trimming of binaries, perhaps someone
with more regexp skill could improve on this:
1> re:split(<<" \tabc\t ">>, "[(^\\h*)(\\h$)]",[trim]).
[<<>>,<<>>,<<>>,<<"abc">>]
BR,
Ulf W
--
Ulf Wiger
CTO, Erlang Training & Consulting Ltd
http://www.erlang-consulting.com
More information about the erlang-questions
mailing list