Maple supports nested procedures. For example, you can write
f1 := proc(x) local g; g := x -> x+1; x*g(x) end;
Procedure has a local variable
which is a procedure.
computes
. However, nested parameters and local variables
do not use nested scoping rules. E.g. the above procedure is not
equivalent to this one
f2 := proc(x) local g; g := () -> x+1; x*g() end;
because the reference to in the
procedure does not refer to
the parameter
in
. It refers to the global variable
. Consider these examples
> f1(a); a (a + 1) > f2(a); a (x + 1) > x := 7; x := 7 > f2(a); 8 a
One similarly cannot refer to local variables in outer scopes.