From: Robert S. Thau (rst@ai.mit.edu)
Date: Mon Mar 20 2000 - 08:50:27 PST
John Klassa writes:
> It is my understanding that lisp and scheme are fairly closely
> related... Would there be an advantage to learning one over the other,
> given that I probably won't use either very much, but am learning more
> or less for the sake of broadening my horizons a bit? In either case,
> is there a standard book that one recommends when the topic comes up?
Well, the problem with characterizing Lisp as distinct from Scheme is
that from the 1960s through, probably, the late 1980s, "Lisp" was less
a name for a particular programming language, than a name for a whole
family of programming languages (including the early versions of
Scheme) which had about as much internal variety as, say, Pascal, C,
Algol 68, PL/I, Ada... (all of which can be considered as "Algol
derivatives" if you squint).
What happened in the late '80s was the emergence of a kitchen-sink
dialect called Common Lisp, which was very much a committee product;
that's what most people call "Lisp" nowadays, although Emacs Lisp is
very different in a lot of respects (I believe it defaults to dynamic,
rather than lexical, variable scope, for instance).
Scheme was seized upon by a somewhat smaller cadre of folks who didn't
like kitchen-sink languages, and wanted a small, cleanly designed
language without unnecessary parts. A lot of research was done, for
instance, trying to design a macro system which was semantically pure
enough to pass muster. On the other hand, they were willing to
consider some really radical stuff which was just to weird for the
Common Lisp committee (for example, call-with-current-continuation, a
primitive for messing with the stack which is powerful enough that it
is trivial to implement not only catch/throw and errset, but also
cooperative multitasking, in terms of it).
There's a good paper in the proceedings of the second History of
Programming Languages conference on all of this.
In terms of what you should study, if you're just doing it for
personal edification, I think Scheme is a more interesting language
than Common Lisp --- but I also have to agree that if what you want is
exposure to new and different ways of thinking about programming, it
might be better to look at one of the functional languages --- SML,
say, or Haskell, which are strongly typed programming languages which
require almost no type declarations (though they're often used in
Haskell as a matter of style). SML's module system in particular is
something I'd very much like to see in other languages; it's kind of
like C++ templates, except that it does a *lot* more checking on the
templates (called functors), and has way fewer gotchas...
rst
This archive was generated by hypermail 2b29 : Mon Mar 20 2000 - 08:51:38 PST