# Wither Self

Raimo Niskanen <>
Tue Sep 9 09:23:22 CEST 2003

```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},

when Strange is bound vs unbound, or

{Even, Odd, Strange} =
{fun(0) -> true;  (N) -> Odd( N-1) end,
fun(0) -> false; (N) -> Even(N-1) end,
{very,Strange}},

or even

{Even, Odd, Strange} =
{fun(0) -> true;  (N) -> Odd( N-1) end,
fun(0) -> false; (N) -> Even(N-1) end,
case Strange() of
true -> fun()->Odd(0)end;
false -> fun()->Even(0)end
end},

or do you mean that it is just fun()s unbound variables that should be
checked after the pattern match binding?

/ Raimo Niskanen, Erlang/OTP, Ericsson AB

Richard A. O'Keefe wrote:
> Joe Armstrong <> wrote:
> 	    Shouldn't there be a Self in funs?
>
> 		Fac = fun(0) -> 1;
> 			 (N) -> N*Self(N-1) end
>
> Well, if the compiler were just a touch smarter, you wouldn't need it.
>
> If you have
>     <pattern> = ... <fun> ...
> 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.
>
> Then you could just write
>
> 	Fac = fun(0) -> 1; N -> N * Fac(N-1) end,
>
> without needing Self.  This would also handle mutual recursion:
>
>     {Even, Odd} =
>         {fun(0) -> true;  (N) -> Odd( N-1) end,
>          fun(0) -> false; (N) -> Even(N-1) end},
>
> which the Self proposal would not deal with at all.
>

```