Information is not knowledge, knowledge is not wisdom, wisdom is not truth. (Frank Zappa)

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 have it.

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 easier.

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.