[erlang-questions] examples for erlang with joins

Hubert Plociniczak <>
Mon Mar 9 02:51:03 CET 2009


2009/3/8 Vlad Dumitrescu <>

> 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.html>


More information about the erlang-questions mailing list