Most of the time, when I tell people that I like and admire Lisp, they'll give me some pretty weird looks, and
then they'll ignore me for the rest of their lives.
Well, after all those years, I'm usually not hurt anymore. Not only because I'm a stubborn old fart,
but mostly because in the past few years there has been a
huge surge of interest in functional and
dynamic languages - and so everybody and their sister
already programs in a Lisp-like language
(only without knowing it), or at least in a language whose designers adopted
very significant amounts of Lispy concepts. Examples: C#, JavaScript, Ruby, Python, Scheme, Groovy,
Perl, Smalltalk, Java - and, in fact, pretty much
any language running on top of the CLR or JVM.
Anyway - being an old fart, my memory doesn't serve me as well as it used to, hence my
bias towards simple concepts and simple solutions which are easy to memorize. For example,
a compelling reason to fall in love with Lisp is its syntactical simplicity.
Lisp probably has the easiest syntax of all programming languages. Want proof? Some good soul
over at
reddit linked to a reference to BNF graphs for
various languages today. Lisp's
BNF looks like this:
s_expression = atomic_symbol / "(" s_expression "."s_expression ")" / list
list = "(" s_expression < s_expression > ")"
atomic_symbol = letter atom_part
atom_part = empty / letter atom_part / number atom_part
letter = "a" / "b" / " ..." / "z"
number = "1" / "2" / " ..." / "9"
empty = " "
Compare the above to, say,
Java.
(And yes, the description above doesn't tell the whole story since it doesn't cover any
kind of semantic aspects. So sue me.)
And while we're at it:
Lisp Syntax Doesn't Suck,
says Brian Carper, and who am I to disagree.
So there.