Thanks for the correction. A stack is sufficient for invoking functional
arguments but not for invoking functional results. And once you allow
functional results you may have to use a heap to hold their lexical
environment and GC is pretty much a requirement. Algol60 avoided GC
by disallowing functional results. C avoided GC by disallowing nesting.
On Feb 16, 2018, at 9:40 AM, Paul McJones
<paul(a)mcjones.org> wrote:
Actually, Algol 60 did allow functions and procedures as arguments (with correct static
scoping), but not as results, so they weren’t “first class” in the Scheme sense. The Algol
60 report (along with its predecessor and successor) is available, among other places,
here:
http://www.softwarepreservation.org/projects/ALGOL/standards/
On Feb 16, 2018, Bakul Shah
<bakul(a)bitblocks.com> wrote:
They did lexical scoping "right", no doubt. But back when
Landin first found that lambda calculus was useful for
modeling programming languages these concepts were not clearly
understood. I do not recall reading anything about whether
Algol designers not allowing full lexical scopin was due to an
oversight or realizing that efficient implementation of
functional argument was not possible. May be Algol's call by
name was deemed sufficient? At any rate Algol's not having
full lexical scoping does not mean one can simply reject the
idea of being influenced by it. Often at the start there is
lots of fumbling before people get it right. May be someone
should ask Steele?