Xref: utzoo comp.lang.lisp:4535 comp.lang.scheme:2018 Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sun-barr!olivea!mintaka!ai-lab!zurich.ai.mit.edu!jinx From: jinx@zurich.ai.mit.edu (Guillermo J. Rozas) Newsgroups: comp.lang.lisp,comp.lang.scheme Subject: Re: Scheme as an Algol-like, not Lisp-like, language Message-ID: Date: 27 Feb 91 02:30:28 GMT References: <1991Feb15.191259.20090@aero.org> <1991Feb15.223520.17267@Think.COM> <1991Feb18.191549.7575@aero.org> <1991Feb19.030719.1137@Think.COM> <4234@skye.ed.ac.uk> Sender: news@ai.mit.edu Reply-To: jinx@zurich.ai.mit.edu Organization: M.I.T. Artificial Intelligence Lab. Lines: 100 In-reply-to: pcg@cs.aber.ac.uk's message of 26 Feb 91 19:49:09 GMT Now, *you* are underestimating me a bit. The serious point I was making is that a Lisp is historically a symbolic List Processing language, while, except for the survival of 'cons', 'car', and 'cdr', Scheme is more of something in the Algol 60 tradition, with a superficially Lisp-like syntax. Well, what makes a Lisp? Let me suggest a few requirements. 1. List processing. 2. Programs that look like data. 3. Objects with unbounded extent and automatic storage management. 4. EVAL (making use of 2). 5. Powerful syntactic extension facilities that make use of 2. 6. Call by value. 7. Imperative constructs. 8. Functional style encouraged, or at least not discouraged. 9. Latent types. 10. Generic arithmetic, with integers not restricted to the word size of the machine. 11. Interactive development enviroments. You are right to claim that Scheme is not a Lisp because of its lack of 4 and 5, but - Every implementation of Scheme that I know of has both. - It is very much the intent of the RnRS group to agree on a portable way to do 5, and we have not yet agreed on 4 not because we don't want EVAL in the language, but primarily because we cannot completely agree on its arity. - There are dialects of Lisp out there that don't satisfy some of those requirements, yet no one thinks they are not Lisp. Of course, Scheme is also Algol-like because it is a lexically scoped, procedural language with imperative constructs, but so is CL. As you probably know, the original claim that Scheme was Algol-like, as opposed to other Lisps, was because other Lisps were dynamically scoped at the time. Scheme cannot be used, portably, to "reason" about programs, inasmuch it cannot *directly* build and execute *program fragments*, like every Lisp-like language is supposed to do. Some say this is *the* distinguishing characteristic of Lisp-like languages, however rarely it is used in practice. Well, not quite right about Scheme. R3RS, the last report published, includes LOAD, and an adequate EVAL can be written in terms of it: (define (eval S-expression) (with-output-to-file "" (lambda () (write S-expression))) (load "")) I think that the provision of *excessive* and *regrettable* (complex and rational!) numeric facilities in Schemeis also designed to give the impression that it is designed to be more of a Algol-like language than a Lisp-like language. Hmm. That's interesting. My reading of the various reports and the draft IEEE standard, and my understanding of their intent, must be different from yours. Scheme does not require ratnums or recnums, it merely requires that built-in operators should handle them transparently if they are provided by an implementation. You are confusing rational numbers with ratnums, an implementation technique for representing arbitrary rationals. You are also confusing complex numbers with recnums, a representation technique for reals with non-zero imaginary parts. The built-in operators should handle rationals (whether implemented as ratnums or floats) and complex numbers (whether they have a non-zero imaginary part or not) correctly, but implementations are free not to supply any way to construct non-float rationals (nor even floats for that matter) nor any way to construct non-real complex numbers. In other words, the requirement is one of integration if the features are present, not a requirement on the presence! Furthermore, I can't see why you would say that these features put Scheme in the Algol camp instead of the Lisp camp. Algol-60 (the Algol meant by Steele and Sussman) did not have generic arithmetic, but Lisps typically do. Actually, let me say, I think that one of the fatal mistakes in Scheme, like it was for Pascal, is that there is no standard way to address separate compilation! Seriously. Think carefully about the implications... More on this along the way, we hope. Scheme is not a finished language. It is finished enough for some purposes, but it is seriously lacking in others. The lack of other facilities is not because they are not considered important by the authors of the report, but because they have not yet agreed on what they should look like. I think you are reading too much into the Scheme reports.