[erlang-questions] examples for erlang with joins
Hubert Plociniczak
hubert.plociniczak@REDACTED
Mon Mar 9 02:51:03 CET 2009
2009/3/8 Vlad Dumitrescu <vladdu55@REDACTED>
> Hi,
>
> > receive
> > {foo, One} and {bar, Two} when (One > Two) ->
> > expr.....;
> > ....
> > end
>
> Thiss looks interesting, but could you please describe the semantics
> of the above example? Does it match for the two messages in sequence,
> does one of them have to be the first in queue, is order important?
>
Let's assume that in the mailbox we have messages(from oldest to newest):
[ {foo, 12}, {bar, 2} ]
or
[ {bar, 2}, {foo, 12} ]
Then both will match because I check all the possible permutations. The
order is important when we have
more Joins and it works in a similar way as standard selective receive, i.e.
the first valid permutation will match.
Here is an extract from my test cases to give you an idea of what I want to
achieve (should be self-explanatory):
self() ! foo,
self() ! foo,
self() ! foo,
self() ! foo,
ok = receive
foo and foo and foo and foo ->
ok
end,
clear_mailbox(), %% purge all messages
self() ! {one, 1},
self() ! {two, 3},
Z = 4,
A = 1,
ok = receive
{two, 3} and {one, Z} ->
error;
{two, 3} and {one, A} ->
ok
end,
self() ! {test, test1, test2},
self() ! foo,
ok = receive
_X and foo ->
error;
X ->
{test, _, _} = X,
ok
end,
self() ! {test1, 10},
self() ! {test2, 15},
self() ! {test3, 10},
ok = receive
{C, X1} and {B, X1} ->
try
C = test1,
B = test3,
ok
catch
error:{badmatch, _} ->
C = test3,
B = test1,
ok
end
end.
I am also working on Operational Semantics for this extended version of
Erlang with Joins, but it is still work in progress.
Zvi,
>nice work. Does it work only inside receive or for any pattern match?
>If it's supporting generic pattern matching, I would suggest, rewriting
>mochiweb HTML parser, using your join patterns.
This is only designed for matching on the messages in the mailbox.
hubert
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090309/07e02e0f/attachment.htm>
More information about the erlang-questions
mailing list