a semantic comparison of lisp and scheme
We review the features of some of the major dialects of LISP, show how they are reflected in denotational treatments of their semantics and draw a series of conclusions concerning semantic design of languages, program proving and optimization. We concentrate our attention on four dialects: (1) LISP 1.0 - approximating McCarthy's original design, (2) Modern LISP - approximating the major features of most current systems, (3) Funarg LISP - Modern LISP with upward and downward functional arguments, and (4) SCHEME - Steele and Sussman's lexically scoped dialect. LISP 1.0 and SCHEME are semantically tractable. In both cases it is possible to write a denotational semantics which exactly specifies the types of semantic objects being manipulated and the meaning of each valid syntactic construct. For modern LISP and Funarg LISP, on the other hand, we show that it is not possible to give a semantics which fully specifies the language and satisfies all the tenets of denotational semantics. However, we give a definition which rests on the foundational underpinnings of denotational semantics, thus guaranteeing that our semantic objects exist, and violates only the structural definition principle: that the meaning of a construct be defined in terms of the meanings of its parts. This has far-reaching significance for program proving, optimization and comprehensibility of programs.
semantic comparisons lisp scheme review feature drawing design language program optimality attention approximation systems functional argument writing denotational semantics types object mean definition structure comprehension