You can try something like this<br><br>f(A,B) -> try f1(A,B) catch error:function_clause -> f1(B,A) end.<br><br>f1(P1, P1) -> expr11;<br>
f1(P1, P2) -> expr12;<br>
f1(P1, P3) -> expr13;<br>
f1(P2, P3) -> expr23;<br>
.......<br>
f(Pm, Pn) -> expr_m_n.<br>
<br><div class="gmail_quote">On Fri, Feb 13, 2009 at 9:27 AM, Boris Okner <span dir="ltr"><<a href="mailto:boris.okner@gmail.com">boris.okner@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
This must be a trivial question, and it's probably more related to<br>
functional programming in general, rather then to Erlang.<br>
I have a function f(A,B) for which f(A,B) is ALWAYS equivalent to<br>
f(B,A).  So I call it "symmetrical".<br>
Arguments A and B  are patterns, and f is legal for some of<br>
combinations of A and B.<br>
So I have a (long) list of clauses like so:<br>
f(P1, P1) -> expr11;<br>
f(P1, P2) -> expr12;<br>
f(P1, P3) -> expr13;<br>
f(P2, P3) -> expr23;<br>
.......<br>
f(Pm, Pn) -> expr_m_n;<br>
<br>
%Other pairs are illegal<br>
f(_, _) ->throw(illegalPairException).<br>
<br>
My problem that I don't want to manually write  clauses like f(P2,<br>
P1), f(P3, P1) etc., because symmetrical cases would have been already<br>
described (i.e. f(P1, P2) is equivalent to f(P2,P1)).<br>
And I can't use<br>
f(A, B) -> f(B,A)<br>
because "illegal"  clause already covers this case.<br>
<br>
Thank you for suggestions!<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" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>--Hynek (Pichi) Vychodil<br><br>Analyze your data in minutes. Share your insights instantly. Thrill your boss.  Be a data hero!<br>Try Good Data now for free: <a href="http://www.gooddata.com">www.gooddata.com</a><br>