|Steele and Sussman||March 10, 1976||32||LAMBDA: The Ultimate Imperative|
The reader may have noticed that the variable
PARITY is uselessly passed around between
L3. This could easily be optimized out by a compiler using analysis of data flow graphs. For example, the graph for the parity example would be:
From this it can be deduced that the
L3 loop does not alter parity, and that after this loop exits to
L2 control cannot pass back to the loop, and so that
PARITY need not be an argument to
L3 in the SCHEME version.
Church understood the problem of divergent arguments; this is evident in his distinction between lambda calculus and lambda-K calculus. Fischer [Fischer 72] specifically discusses the use of functional values to simulate
Moses gives a good description of this dichotomy in [Moses 70].
The great GO TO controversy was started by Dijkstra in 1968 [Dijkstra 68]. This issue was argued heatedly and came to a head at ACM 72. One of the proponents of GO TO-less programming was Wulf, whose language BLISS was purposely designed without GO TO statements. [BLISS 70] He soon discovered that some compensation for the omission was needed, and so exit expressions were introduced, followed by leave expressions. [Wulf 71] [Wulf 72]
The extensible language EL1 was designed before 1970, just before the GO TO statement became a real issue. It had no GO TO statement, but this was more because Wegbreit was more interested in studying extensible data types in his thesis than control structures, and he preferred to omit many control structures from EL1 rather than install a dozen features not well thought out. [Wegbreit 70, p. 417] The EL1 language definition became the basis for the ECL programming system at Harvard. [Wegbreit 71] This implementation was embellished with the GO TO statement. [Wegbreit 72] Partly because of GO TO