R5RS-Scheme is a very nice little language. There is no doubt about
that. Anyway, though it is very nice, there are a few things that
sometimes really make it hard to use. I am saying this from a sort of
"practical" perspective: Its what I noticed when I had to use it, being
used to common lisp.
A major issue for me is the lack of a
default possibility to determine the current compiler somehow. This
makes it impossible to write portable code. But especially in scheme,
which is very small and has a lot of extensions through its compilers
and interpreters, such a thing would be extremely helpful. I dont know
about R6RS, except that many schemers dont like it. Maybe it already has
such a thing.
Then, well, its a lisp-1. This has advantages and
drawbacks. Actually, I think that a lisp-2, putting callable objects
into an own namespace, is actually better in a "practical" sense. On the
other hand, always having to write "funcall" like in common lisp when
calling a function variable is not nice, it should have some "inverse"
to its #'-prefix for declared functions. Well, thats a matter of taste,
and neither common lisp nor scheme really are the way I would like to
Also an issue for me is the way it handles its dynamic
argument numbers. Scheme has a very nice way of doing this, which embeds
into the theory perfectly, specifying (define (name x y z . rest)).
Compared to the common lisp way, which has &rest-specifyers, this
looks pretty. On the other hand, common lisp has an &optional
specifyer, and an &keys specifyer, one can name keys, define default
values, etc. - all this can be done in scheme only with more code. And
its something I really like to have. It makes debugging and specifying
Of course, common lisp also has drawbacks, for example
the lack of a named let. I dont want to insult schemers here, or say
that scheme is a bad language. Its just a few things that I noticed.