Wither Self
Richard A. O'Keefe
ok@REDACTED
Wed Sep 10 04:05:53 CEST 2003
Raimo Niskanen <raimo@REDACTED> wrote:
If the compiler would check for unbound variables in the right
side of match expression *after* the pattern match, how would the
following be treated?
{Even, Odd, Strange} =
{fun(0) -> true; (N) -> Odd( N-1) end,
fun(0) -> false; (N) -> Even(N-1) end,
Strange},
I most certainly did NOT say "check for unbound variables in the right
side of match expression"! What I wrote was quite explicit:
> If you have
> <pattern> = ... <fun> ...
vvvvvvv
> then the check for unbound variables in <fun> should ask whether
^^^^^^^
> any variable will still be unbound *after* the pattern is matched
> instead of whether any variable is unbound *before* the pattern match.
In your example,
{Even, Odd, Strange} =
{fun(0) -> true; (N) -> Odd( N-1) end,
^______________ *IS* in a <fun>
fun(0) -> false; (N) -> Even(N-1) end,
^______________ *IS* in a <fun>
Strange},
^_______________________________________ is *NOT* in a <fun>
The change applies only to <funs>, and I should have said that it should
apply only to those <funs> which are only enclosed by [..] {..} constructors;
a <fun> which is an argument of a function call should be checked like the
rest of the expression.
In the example
{Even, Odd, Strange} =
{fun(0) -> true; (N) -> Odd( N-1) end,
^______________ *IS* in a <fun>
fun(0) -> false; (N) -> Even(N-1) end,
^______________ *IS* in a <fun>
{very,Strange}},
^_________________________________ is *NOT* in a <fun>
the alleged problem is again fictitious.
or do you mean that it is just fun()s unbound variables that
should be checked after the pattern match binding?
Yes. That's why I _said_ so.
More information about the erlang-questions
mailing list