[erlang-questions] Why does fun2ms produce this particular result?

Daniel Dormont <>
Sun May 1 21:06:09 CEST 2011

I'm trying to get the hang of match specs. Here's a pretty simple one but it
has a feature I'm not getting. It's intended for use with Mnesia:

1> rd(person, {name, address, email, phone}).
2> ets:fun2ms(fun(#person{name=Name, email=Email}) -> {Name, Email}
[{#person{name = '$1',address = '_',email = '$2',
          phone = '_'},

My first question was going to be why the whole thing is a single-element
list, but I think I figured that out: it's because there could be multiple
clauses of the match as a whole. The part I don't get is in the result:

1) Why is it a list at all, since a particular head in the function can only
have one result?
2) Why does the tuple have to be wrapped in another tuple? ie why isn't it
just {'$1','$2'}

For now I'm happy to just trust that fun2ms works, but I'd like to
understand it a little better.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20110501/dc2b7cf0/attachment.html>

More information about the erlang-questions mailing list