Termite has a recieve function ?? defined as (?? pred [timeout [default]]) which retrieves the first message in the mailbox which satisfies pred. This is basically impossible to implement today in Erlang but would be possible to add.
<br><br>I would however probably oppose it as you could get into really weird situations if pred had side effects. It is actually just like allowing user defined functions in guards.<br><br>receive<br>    X when user_function(X) -> X
<br>end<br><br>I actually defy anyone to come up with a safe, consistent and *understandable* definition of guards which allow user defined functions. It would also be nice if they were relatively easy to implement. Joe, remember our ideas with pipes?
<br><br>Robert<br><br><div><span class="gmail_quote">On 27/11/2007, <b class="gmail_sendername">Lev Walkin</b> <<a href="mailto:vlm@lionet.info">vlm@lionet.info</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>This can be achieved using a combinator, if only there<br>were a possibility to not to extract the current message,<br>e.g., "retain":<br><br><br>receiveFun(F) -><br>        % Discover the timeout using F
<br>        {Timeout, Default} = try F(timeout) of<br>                T -> T;<br>                catch<br>                        _:_ -> {infinity, _}<br>                end,<br>        % Receive something and validate against F.
<br>        receive Something -><br>                try F(Something) of<br>                        Result -> Result<br>                catch<br>                        _:_ -> retain Something<br>                end
<br>        after Timeout -> Default end.<br><br>...<br>F = fun(Pattern1) -> Actions1;<br>        (Pattern2) -> Actions2 end;<br>        (timeout) -> {15000, Actions};<br>...<br>receiveFun(F)<br><br><br>Such "retain" thingie could be reused in more interesting contexts.
<br>However, one drawback is that retain would be useful only for the<br>nearest enclosing "receive" context.<br><br><br>Joe Armstrong wrote:<br>> Now you mentioned receive it occurred to me that it would be rather nice to
<br>> receive a fun in Erlang. Unfortunately receive has only one syntactic form<br>><br>>      receive<br>>          pattern1 -> action1;<br>>          ...<br>>      end.<br>><br>> In the spirit of funs it would be very nice to say:
<br>><br>>      F = fun(Pattern1) -> Actions1<br>>                (Pattern2) -> Actions2<br>>                after Time -> Actions<br>>            end,<br>>      ...<br>>      receive(Fun)<br>
><br>>       This would make writing an erlang meta interpreter much easier<br>> and allow all kinds of mischief<br>><br>> /Joe Armstrong<br>><br>><br>><br>> On Nov 27, 2007 12:06 AM, Christian S <
<a href="mailto:chsu79@gmail.com">chsu79@gmail.com</a>> wrote:<br>>> 2007/11/26, Robert Virding <<a href="mailto:rvirding@gmail.com">rvirding@gmail.com</a>>:<br>>>> or how about:<br>>>> (: mod func arg1 arg2 ... )
<br>>>> for all cases?<br>>> It seems like (? ...) and (! ...) are the chosen ways for receive and<br>>> send, and (: M F A...) has a nice symmetry with that. That's a thumbs<br>>> up. (However, I find that too many one-character symbols to make code
<br>>> be a bit "naked", I'm a fast enough typist that I dont mind spelling<br>>> out full words and I think it makes code more readable in the end.)<br>>><br>>> My initial feeling was that ':' would only be a reader macro, that
<br>>> there would be a full form for remote calls, just like how '(a b c) is<br>>> shorthand for (quote (a b c)).<br>>><br>>> As far as I understand, lisp started out being a theoretical model
<br>>> used to describe/reason about programs, until someone figured out it<br>>> would be easy to make a computer evaluate them. It would probably be a<br>>> sensible route to start erlang in sexprs too: write some programs,
<br>>> discover the needed features, then try to build an evaluator for it.<br>>><br>>> _______________________________________________<br>>> erlang-questions mailing list<br>>> <a href="mailto:erlang-questions@erlang.org">
erlang-questions@erlang.org</a><br>>> <a href="http://www.erlang.org/mailman/listinfo/erlang-questions">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>>><br>> _______________________________________________
<br>> erlang-questions mailing list<br>> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>> <a href="http://www.erlang.org/mailman/listinfo/erlang-questions">http://www.erlang.org/mailman/listinfo/erlang-questions
</a><br><br>_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br><a href="http://www.erlang.org/mailman/listinfo/erlang-questions">
http://www.erlang.org/mailman/listinfo/erlang-questions</a><br></blockquote></div><br>