[erlang-questions] case expression scope

Ivan Uemlianin <>
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
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>

-- 
============================================================
Ivan A. Uemlianin PhD
Llaisdy
Speech Technology Research and Development

                     
                      www.llaisdy.com
                          llaisdy.wordpress.com
               github.com/llaisdy
                      www.linkedin.com/in/ivanuemlianin

                         festina lente
============================================================



More information about the erlang-questions mailing list