Is Scheme Lisp?
c2.com
c2.com
Thirty years ago, there were dozens of variants of LISP out there, from the mainstream (MacLISP, InterLISP, Lisp Machine LISP) to the esoteric (it seems like every major CS department in the world had a local LISP dialect, much as many of them would soon have local Unix dialects).
Many of these dialects had differences between them -- from the everything's-a-message architecture of Carl Hewitt's ACTORS (think smalltalk-meets-continuation-passing-style) to a number of LISPs with logic programming features. A number of dialects even played with Algol-like syntax (McCarthy himself had planned to give LISP an Algol-like syntax. S-Expressions were a fortuitous stopping point on the way to an implementation of so-called M-Expressions which never came).
In the writings of the time, I don't see much debate over whether these systems were or were not LISP. Mostly, people understood this as a big family of languages.
In contrast, Common LISP and Scheme not only have much more in common than those LISPs did, in one important regard (lexical scoping), they are closer to each other than they are to the vast majority of historical lisp implementations. The only reason we're asking this question is because after the fading away of other historical LISP dialects, the differences between Scheme and Common LISP seem bigger than they are.
So yeah, I'd say Scheme is LISP.
(By the way, two great looks at the LISP family tree are The Evolution of Lisp[1] by Guy L. Steele and Richard Gabriel, and Olin Shivers' History of T[2], an early dialect of Scheme with an extensible version of set! similar to Common Lisp's SETF)
If Scheme is not a Lisp, then by stretching the argument one can even say Algol 68 (large like CL) is not Algol since its very different from Algol58/60 (much more minimal) or vice-versa. Besides the blurred line between what is the language's evolutionary state and what should be considered its family extension, for all practical (and I daresay otherwise also) Scheme is a Lisp.
1. Scheme is not Common Lisp ? 2. Scheme is not Lisp ? 3. Scheme is not a Lisp ?
For the #1, everyone understands that Common Lisp is a different programming language than Scheme. For the #3, it is clear that Scheme is a Lisp.. where Lisp, here, means the Lisp family. (Read, cons, car, macro system, etc etc)
For the #2, this is where it can get a bit blurry as it depends of what we mean by Lisp. Do we mean all the dialect who decided to unit themselves in Common Lisp? If so, Scheme is not Lisp. Do we mean a lisp dialect? So, Scheme is Lisp. It's just confusing because of the word lisp who is being used in all possible ways.
But, Scheme is a lisp and Scheme is not Common Lisp. Whether Scheme is Lisp, it depends of your meaning of Lisp.. So, unless you take the time to clearly define what you mean by lisp, it doesn't worth all the argumentation.
I think "Scheme is a Lisp dialect" is clearer. "Does Scheme have enough Lisp-iness?" avoids the semantic trap of "is", but in doing so, shows how vague the question is.
For historical reasons, I would call Scheme a Lisp, and I would not use the word Lisp as synonymous to Common Lisp. Common Lisp surfaced after Scheme, and Lisp was used of programming languages even before Scheme.
The standard of Scheme, if at all, is being set by major implementations. However, Scheme is designed so you make your own early in the learning process.
There are three things being discussed, two of which are relevant to the title and one which is not. First, what test or tests define whether language X is a Lisp. Second, does Scheme pass these tests. Third, is it advantageous to "Lisp" the community or concept or whatever for Scheme to be considered a Lisp.
The third question has nothing to do with whether Scheme is a Lisp as defined by the first two questions.
"In the Algol family, the symbol table is a compiler construction. In the Lisp family, the symbol table is a run-time resource. In this sense, Scheme is a member of the Algol family and not a member of the Lisp family."
(http://www.xach.com/naggum/articles/3225240324630811@naggum....)
The page's second argument for why Scheme is not a Lisp ridiculous. Basically: CL is meant to be the Lisp, therefore Scheme should just go away.
As an ardent, strident even, Schemer, it is my reasoned opinion that only a mentally disabled person would today design a LISP-2; the idea that function names occupy a namespace distinct from other objects makes less sense than Perl's syntax.
CL and Scheme occupy, by design, I am comfortable saying, two distinct roles in the Lisp world: CL is the New Jersey Lisp whereas Scheme is the MIT Lisp.
That said, there's a new New Jersey Lisp in town, and it wipes the floor with CL. It's called Clojure and it's a LISP-1 for kicking ass and taking names.
That is a horribly inept analogy. My guess is that most CL guys would say 'yes, it is.'
"It is my reasoned opinion that only a mentally disabled person would today design a LISP-2."
A brilliant and insightful analysis. Butter side up or butter side down?
Clojure is nice, but so far I haven't found a way in which it 'wipes the floor' with CL.
I asked one of my CL hacker friends about the L1/L2 question, and he waved has hands a lot and said that Richard Gabriel said that L2s were better. I read the essay that he alluded to (but didn't actually read, apparently) and it read as a compelling argument FOR L1s until the end:
[Quoting from the paper, available at http://www.nhplace.com/kent/Papers/Technical-Issues.html]
The bulk of arguments that focus on clean semantics and notational simplicity tend to favor uniting the function and value namespaces. In spite of this, there are those who hold strongly to a belief that a two-namespace system affords useful expressive power that they are unwilling to do without. In the end, practical considerations favor the status quo for Common Lisp. There is a large number of improvements beyond a single namespace that could be made to Common Lisp that would clean it up and simplify it. We feel that the time for such radical changes to Common Lisp passed…
[End quote]
So I have a CL expert, writing for the standard committee, arguing that all things considered, L2s suck, but we're stuck with keeping CL an L2.
So that, in addition to my own experience with CL, Scheme, and other languages, is the basis of my informed opinion.
"The bulk of arguments that focus on clean semantics and notational simplicity tend to favor uniting the function and value namespaces."
These are the first 3 points about notational simplicity and referential transparency.
"In spite of this, there are those who hold strongly to a belief that a two-namespace system affords useful expressive power that they are unwilling to do without."
These points are contested by some. (overall it seems a matter of aesthetics, objectively single namespace is more elegant).
"In the end, practical considerations favor the status quo for Common Lisp."
Practical considerations, being the other 10 or so points about implementing and using it relatively efficiently, and using macros. Some of which are a toss up, others are in favor of one or the other...
"There is a large number of improvements beyond a single namespace that could be made to Common Lisp that would clean it up and simplify it. We feel that the time for such radical changes to Common Lisp passed, and it would be the job of future Lisp designers to take lessons from Common Lisp and Scheme to produce an improved Lisp." (Clojure)
I'm okay with your informed opinion, what I have a problem with it is you putting it in such a stark relief with little to no stated basis for the opinion.
Please keep in mind that if I were in his position I too would have recommended keeping CL an L2, in large part because CL is the New Jersey Lisp, and doing the Right Thing is a Bad Idea if it gets in the way of things like backward compatibility with metric shit-tonnes of existing source code.
And for your benefit, and for the benefit of all the karma pharmers, I'll try to excise my HN writing of every last bit of hyperbole—or life of any kind. The model HN comment apparently invites readers to put their hands on their chins and sagely nod themselves to a self-satisfied sleep.
Otherwise, I agree.
I figured the overall list processing model (car/cdr and code as data), lack of for loops and ubiquity of recursion obviously made scheme a lisp.
I suppose I haven't really written any common lisp though, so maybe I'm missing something.
The functional programming of Scheme is a Scheme thing, not a Lisp thing.
I think Tool Worship is an appropriately ridiculous phrase for when people become overly fanatical about supporting some language, operating system, text editor, screwdriver head etc. over others to the point of becoming derogatory toward those who hold different opinions.