|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]