Path: utzoo!utgpu!news-server.csri.toronto.edu!mailrus!wuarchive!decwrl!ucbvax!bloom-beacon!THINK.COM!gls From: gls@THINK.COM (Guy Steele) Newsgroups: comp.lang.scheme Subject: What is a Scheme? Message-ID: <9008211445.AA02571@mozart.think.com> Date: 21 Aug 90 14:45:45 GMT References: Sender: daemon@athena.mit.edu (Mr Background) Organization: The Internet Lines: 36 I would like to plead for a little flexibility and tolerance in the question of "What is Scheme?". Scheme has evolved quite a bit over the last 15 years and it seems to me to be too rigid to disqualify an implementation because it lacks a few string functions or even because it lacks CALL/CC. That may disqualify it from being Scheme R^3.95 or whatever, but not, in my eyes, from belonging to the Scheme family. The original 1975 Scheme didn't have any string functions, but surely it may still be regarded as a Scheme at least to the extent that Lisp 1.5 is still regarded as a Lisp. Allow me to offer my opinion on what makes a Scheme: lambda calculus, which includes: variables, lexically scoped lambda expressions that evaluate to first-class closures combinations (i.e., function calls) with the same evaluation rule used for all positions (function and arguments) Lisp syntax, probably a standard representation for programs as data, probably (typically as lists and symbols) a means of manipulating continuations, maybe (best if they are first-class) a primitive side effect on variables or data, maybe I regard all other data types, including numbers and strings, as entirely inessential to Scheme-ness. The same goes for control structures (I'll just synthesize DELAY and FORCE myself from closures and side effects). So there is one opinion. Let's hear some others. --Guy