David Moon's Programming Language for Old Timers
users.rcn.com
users.rcn.com
Traditionally, code walking has required ad hoc code to understand every “special form.” It is better to have a well-defined, object-oriented interface to the Abstract Syntax Tree, scopes, and definitions. This is why objects are better than S-expressions as a representation for program source code.
I have never heard anyone point to s-expressions as the reason code walkers are hard to write in Lisp (and they are, at least in CL).
"PLOT sports a more conventional-looking syntax than classic Lisp."
Must... not... dismiss out-of-hand!
(Historically, attempts to give Lisp a more conventional syntax have been made of fail)
(From http://catb.org/jargon/html/koans.html)
One day a student came to Moon and said, "I understand how to make a better garbage collector. We must keep a reference count of the pointers to each of the cons." Moon patiently told the student the following story:
"One day a student came to Moon and said, 'I understand how to make a better garbage collector...'"
So I'm inclined to give him the benefit of the doubt, at least for now. ;-)
edit: fixed typo in quote
CONS
Norvig as pointed out that Python can end up looking like Lisp with the parenthesis replaced with indentations (http://norvig.com/python-lisp.html). I think this comes even closer.
Lisp doesn't like to be dressed up.
Dylan has not exactly failed, since it still has an active development team which makes regular releases, but it has not achieved popularity. Dylan has macros, a real condition system, and a CLOS-type object system --- a way better feature list than Ruby's or Python's, IMO.
I think the real problem is that people who understand Lisp understand that Lisp programs are Lisp data structures, and want them to look that way. People who don't get it won't be drawn to the language for its unconventional object system or condition handling. People who are won't be scared off by unconventional syntax.
"There are two special considerations for newlines in the syntax. The purpose of this is to allow nesting structure to be indicated by indentation rather than by any kind of explicit bracketing."