It occurs to me that, in a statically compiled language, function definitions all happen before the program starts, and thus that definition can't be affected by other variables (i.e. an outer function's parameters).
I think you might be confusing static compilation in a language with lack of first-class functions in a language. OCaml is compiled, but functions are first class objects, and nested scopes are accessible:
# let f x = let g y = x + y in g;; val f : int -> int -> int = <fun> # f(1);; - : int -> int = <fun> # f(1)(2);; - : int = 3
Note that the type of f is a function that takes an int and returns a function that takes an int and returns an int. OCaml handles nested scopes appropriately, and successfully compiles the function f (and infers the appropriate types). So the issue is not static compilation, but functions as first class objects.
Of course, many statically compiled languages, e.g. C, C++, Java, do not provide functions as first class objects, so the confusion is not unnatural...
Steve -- http://mail.python.org/mailman/listinfo/python-list