[erlang-questions] Re: Getting the position of a list item

Attila Rajmund Nohl attila.r.nohl@REDACTED
Thu Dec 3 16:47:43 CET 2009


2009/12/2, Tim Fletcher <twoggle@REDACTED>:
>> Hmm, I fail to come up with a good usage scenario for wanting this. What
>> are
>> you needing the position of an item in a list for?
>
> FWIW, here's something i wrote recently:
>
>   base32_decode(Char) ->
>     list_index(Char, base32_alphabet()).
>
>   base32_alphabet() ->
>     "0123456789bcdefghjkmnpqrstuvwxyz".

I usually see code like this implemented like this:

base32_decode2(Char) when Char>=$0, Char=<$9 ->
    Char-47;

base32_decode2(Char) when Char>=$b, Char=<$h ->
    Char-87;

base32_decode2(Char) when Char>=$j, Char=<$k ->
    Char-88;

base32_decode2(Char) when Char>=$m, Char=<$n ->
    Char-89;

base32_decode2(Char) when Char>=$p, Char=<$z ->
    Char-90.

It (ab)uses the fact that we're latin-1 (effectively ASCII) charset.
The other kind of code I usually see for this kind of task contains
one function clause for each possible inputs. I don't know, but I
think both approaches are faster than traversing the list with
string:str/2. Probably binaries could be used instead of lists to
speed up indexing.


More information about the erlang-questions mailing list