|Steele and Sussman||March 10, 1976||33||LAMBDA: The Ultimate Imperative|
politics and partly for implementational expediency, the GO TO was later removed from the ECL system. [Wegbreit 74b]
Nowadays it is common for a language designer to omit the GO TO statement as a matter of course. [Liskov 73] [Liskov 74] [Smith 75] Unfortunately, not all new languages which omit the GO TO provide reasonable compensation for the omission.
Knuth presents an extensive history of the GO TO controversy [Knuth 74] and asks, "Will UTOPIA 84, or perhaps we should call it NEWSPEAK, contain GO TO statements?" (p. 264) But perhaps we should ask instead, "Will UTOPIA 84 offer alternatives convenient enough that we won't need the GO TO very often?"
Not only does an unconditional transfer to
F occur, but values may be passed. One may think of these values as "messages" to be sent to the lambda expression
F. This is precisely what Hewitt is flaming about (except for cells and serializers). [Smith 75]
The technique of repeatedly modifying a variable passed call-by-name in order to produce side effects on another call-by-name parameter is commonly known as Jensen's device, particularly in the case where the call-by-name parameters are j and a[j]. We cannot find any reference to Jensen or who he was, and offer a reward for any information leading to the identification, arrest, and conviction of said Jensen.
The escape function is analogous to the "program point" returned by Landin's J-operator. [Landin 65] This program point contains the SECD "dump" in exactly the way a SCHEME
DELTA expression contains the "clink". [Sussman 75]
This statement is equivalent to the well-known "
JRST hack", which states that the sequence of PDP-10 instructions
PUSHJ P,FOO POPJ P, is equivalent to JRST FOO
except no stack slot is used.
LABELS construct of SCHEME is isomorphic to Landin's let rec construct [Landin 65] and Reynold's letrec construct [Reynolds 72]. Its purpose is to allow a function to refer to itself. It is more convenient than the more familiar
LABEL construct of LISP 1.5 because it allows definition of several mutually referent functions. The general form of a
LABELS construct is: