[erlang-questions] List matching, help me make this look better

Kevin <>
Sat Apr 25 19:28:04 CEST 2009


As an example I want to read a file, line by line, and pass the line 
into a function, and it want it to match
on the first 4 characters.  In the example I'm matching on "aaaa", 
"bbbb", "cccc".

Lines in the file would look like this
aaaa 123
bbbb 234
cccc 345
dddd 456
...


using the functions below works fine, as well as something similar using 
a case statement:

myfunc([$a, $a, $a, $a | _]) ->
    io:format("matched aaaa~n");

myfunc([$b, $b, $b, $b | _]) ->
    io:format("matched bbbb~n");

myfunc([$c, $c, $c, $c | _]) ->
    io:format("matched cccc~n");

myfunc(_) ->
    io:format("no matches~n").



My dissatisfaction is I'm taking the elegance of pattern matching in 
function params and making it ugly with
$a, $a, $a, $a.  Is there anyway to "explode" a list like "aaaa" 
(borrowing that term from ruby), or some other matching trick I'm missing??

Obviously ["aaaa"|_] won't work because its really just [ [$a, $a, $a, 
$a] | _ ]

One thing I tried was passing in a split tuple, but that feels more like 
a work-around
{"aaaa", _} = lists:split(4, "aaaa 1234").


I also tried converting everything to binaries but that traded ugly for 
ugly.



Thanks,
-kevin









More information about the erlang-questions mailing list