No, bar is not a closure. It is basically just a local procedure.
The original Pascal did not have full closures. Functions did only exist as long as their surrounding function was called. They could not be returned from functions. Pascal lacked also the necessary Garbage Collection. Pascal had lexical scope, but not full closures.
All you could do was pass functions to other functions. But that's trivial, since each time one passed function X, it gets its active environment, which always is on the stack. There was no way to have closures, where functions have their own set of variable bindings, even when the surrounding function is no longer active. Being able to pass a function downwards is not sufficient to require full closures.
Basically the same applies for Algol. Functions can't be returned and are not first class objects.
What Algol contributed to the evolution of Lisp was lexical scope, but not closures. Also note that it was not Scheme that introduced closures in Lisp.
That's what I fear, many people think they know what a closure is, but in reality there is a lot of confusion.
I do mean the main implementation, CPython. I guess an implementation is free to avoid unnecessary closures and it would be nice to know if any others do.
You are right in your description of the limitations of Pascal.
As for your claim that it was not Scheme that introduced closures to Lisp, I'd like to hear more about that. I've run across the claim that Scheme was from a number of sources, including http://en.wikipedia.org/wiki/Closure_%28computer_science%29, and I haven't heard of any other prior art.
The original Pascal did not have full closures. Functions did only exist as long as their surrounding function was called. They could not be returned from functions. Pascal lacked also the necessary Garbage Collection. Pascal had lexical scope, but not full closures.
All you could do was pass functions to other functions. But that's trivial, since each time one passed function X, it gets its active environment, which always is on the stack. There was no way to have closures, where functions have their own set of variable bindings, even when the surrounding function is no longer active. Being able to pass a function downwards is not sufficient to require full closures.
Basically the same applies for Algol. Functions can't be returned and are not first class objects.
What Algol contributed to the evolution of Lisp was lexical scope, but not closures. Also note that it was not Scheme that introduced closures in Lisp.
That's what I fear, many people think they know what a closure is, but in reality there is a lot of confusion.