I previously wrote:
| ... ALGOL-10 used a "display", which was accessible from the dynamic
| link (frame pointer), to handle access to lexicals. So even if an
| argument was passed from a nested procedure, looking just "up one"
| from the current frame pointer would get you the lexical context of
| said nested procedure, and from *its* display you can get to any of
| the lexicals which were visible to it (including those in routines
| in which it was nested).
Just to clarify one tiny point, lest I mislead someone:
While argument thunks referring to lexical variables (or expressions)
didn't themselves need a closure environment per se (since they could
recover the caller's display from the call frame), an argument which
was a procedure name *did* have to contain the display as a (hidden)
part of the argument, since without it the procedure argument couldn't
be called correctly (especially if that argument might be passed on
to a further sub-procedure as an argument).
So "procedure arguments" *were* very much like Scheme closures, even
though the thunks of other kinds of by-name arguments weren't really.
Rob Warnock, 31-2-510 email@example.com
SGI Network Engineering http://reality.sgi.com/rpw3/
1600 Amphitheatre Pkwy. Phone: 650-933-1673
Mountain View, CA 94043 PP-ASEL-IA