[erlang-questions] case expression scope
Ivan Uemlianin
ivan@REDACTED
Mon Mar 3 18:06:35 CET 2014
It doesn't quite answer your question but perhaps case was a late
addition. Often more concise code avoids it and uses pattern matching
instead. e.g., your example using pattern matching could be:
f1(0, Y) ->
{Y, Y};
f1(X, Y) ->
{X*Y, X+Y}.
Best wishes
Ivan
On 03/03/2014 16:59, Daniel Goertzen wrote:
> One thing that repeatedly bites me is the way variables bindings leak
> out of case expressions. For example, the following code fails to even
> compile because the Ps and Qs smack into each other...
>
> f1(X, Y) ->
> A = case {X,Y} of
> {0, Q} -> Q;
> {P, Q} -> P*Q
> end,
>
> B = case {X,Y} of
> {0, Q} -> Q;
> {P, Q} -> P+Q
> end,
> {A,B}.
>
>
> In situations like the above, I artificially change the variable names
> to avoid trouble and end up with something like this:
>
> f1(X, Y) ->
> A = case {X,Y} of
> {0, Q0} -> Q0;
> {P0, Q0} -> P0*Q0
> end,
>
> B = case {X,Y} of
> {0, Q1} -> Q1;
> {P1, Q1} -> P1+Q1
> end,
> {A,B}.
>
>
> The binding leakages seems like nothing but hassles and headaches to me,
> so my questions is, is there actually a reason why bindings need leak
> out of case expressions? Is there a programming style that leverages
> this feature? Is there a limitation in the emulator that forces it to
> be this way?
>
> I'd love to have a 'hygienic' case expression. Could it be faked with
> parse transforms?
>
> Dan.
>
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
--
============================================================
Ivan A. Uemlianin PhD
Llaisdy
Speech Technology Research and Development
ivan@REDACTED
www.llaisdy.com
llaisdy.wordpress.com
github.com/llaisdy
www.linkedin.com/in/ivanuemlianin
festina lente
============================================================
More information about the erlang-questions
mailing list