From Wikisource
Jump to navigation Jump to search
This page has been validated.
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 L1 and 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:

AIM-353 Note Flowgraph.svg

From this it can be deduced that the L1-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 L1 or 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 CONS.

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