>>5
why?
Because lambda calculus has almost no external environment. The only external word is "lambda" and the easiest way to implement environment is to just (lambda (environment . args) ...) for every function.
when you have thousands of functions defined, you might need a way to manage them and avoid name collisions in an effective way.
Use static analysis where possible. Inline them and use something like JIT to reinline on change.
objective stuff and functional actually mixes pretty well.
first class environment is already "objective stuff"
it serves the same role as sepples objects.
you basically apply closure to environment "object" (a list of object's variables). And rememver, you can have several environments, cuz they are first-class.