The First Report on Scheme Revisited

Designs and standards tend to go in cycles. After a specific new design or standard becomes established, it is incrementally " improved " —usually by the accretion of features, until it becomes unwieldy. Then it is time to step back and reassess the situation. Sometimes a judicious designer can sort through the accumulated set of ideas, discard the less important ones, and produce a new design that is small and clean. Pascal and Modula-2 were produced in this way. Scheme wasn't like that at all. We were actually trying to build something complicated and discovered, serendipitously, that we had accidentally designed something that met all our goals but was much simpler than we had intended. We thought that Scheme would turn out to be the next in a long series of programming languages that had been designed at MIT over the course of 17 years. The principal themes of this series were complex data structures with automatic pattern matching, and complex control structures with automatic backtracking. These languages were specifically envisioned as tools to support explorations into theorem proving, linguistics, and artificial intelligence, in much the same way that Fortran was intended to support numerical computation or COBOL to support business applications. There was Lisp, of course, designed in 1958 by John McCarthy. Less well-known today is Victor Yngve's COMIT (1962), a pattern-matching language intended for use in linguistic analysis. A COMIT program repeatedly matched a set of rules against the contents of a flat, linear workspace of symbolic tokens; it was a precursor of SNOBOL and an ancestor of such rule-based languages as OPS5. In 1964, Daniel Bobrow implemented a version of COMIT in Lisp and (punningly) called the result METEOR. This in turn inspired Adolfo Guzman in 1969 to design CONVERT, which merged the pattern-matching features of COMIT with the recursive data structures of Lisp, allowing the matching of recursively defined patterns to arbitrary Lisp data structures. In 1969, Carl Hewitt designed an extremely ambitious Lisp-like language for theorem-proving called Planner, based on the use of pattern-directed procedure invocation and the use of automatic backtracking as an implementation mechanism for goal-directed search. It was never completely implemented as originally envisioned, but it spurred three other important developments: Muddle, Micro-Planner, and Conniver. The language Muddle (later MDL) was an extended version of Lisp designed in 1970 One of its goals was to serve as a base for a full-blown …