<br><br><div class="gmail_quote">2009/3/8 Vlad Dumitrescu <span dir="ltr"><<a href="mailto:vladdu55@gmail.com">vladdu55@gmail.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br>
<br><div class="im">> receive<br>
>   {foo, One} and {bar, Two} when (One > Two) -><br>
>     expr.....;<br>
>  ....<br>
> end<br>
<br>
</div>Thiss looks interesting, but could you please describe the semantics<br>
of the above example? Does it match for the two messages in sequence,<br>
does one of them have to be the first in queue, is order important?<br>
</blockquote><div><br>Let's assume that in the mailbox we have messages(from oldest to newest):<br>[ {foo, 12}, {bar, 2} ] <br>or<br>[ {bar, 2}, {foo, 12} ]<br>Then both will match because I check all the possible permutations. The order is important when we have<br>
more Joins and it works in a similar way as standard selective receive, i.e. the first valid permutation will match.<br> <br></div></div>Here is an extract from my test cases to give you an idea of what I want to achieve (should be self-explanatory):<br>
<br>    self() ! foo,<br>    self() ! foo, <br>    self() ! foo,<br>    self() ! foo,<br>    ok = receive<br>         foo and foo and foo and foo -><br>         ok<br>     end,<br><br>    clear_mailbox(),  %% purge all messages<br>
    self() ! {one, 1},<br>    self() ! {two, 3},<br>    Z = 4,<br>    A = 1,<br>    ok = receive<br>         {two, 3} and {one, Z} -><br>         error;<br>         {two, 3} and {one, A} -><br>         ok<br>     end,<br>
    self() ! {test, test1, test2},<br>    self() ! foo,<br>    ok = receive<br>         _X and foo -><br>         error;<br>         X -><br>         {test, _, _} = X,<br>         ok<br>     end,<br>    self() ! {test1, 10},<br>
    self() ! {test2, 15},<br>    self() ! {test3, 10},<br>    ok = receive<br>         {C, X1} and {B, X1} -><br>         try<br>             C = test1,<br>             B = test3,<br>             ok<br>         catch<br>
             error:{badmatch, _} -><br>             C = test3,<br>             B = test1,<br>             ok<br>         end <br>     end.<br><br>I am also working on Operational Semantics for this extended version of Erlang with Joins, but it is still work in progress.<br>
<br>Zvi, <br><br>>nice work. Does it work only inside receive or for any pattern match?<br>
>If it's supporting generic pattern matching, I would suggest, rewriting<br>>mochiweb HTML parser, using your join patterns.<br><br>This is only designed for matching on the messages in the mailbox.<br><br>hubert<br>
<br><br><br>