The syntax? What syntax? Lisp really is as close to being "syntax" free as there is. I know the parenthesis are a pain at first, but try to remember back to when you looked at your first Algol-derived language (C, BlitzMax, whatever) - it was foreign, too. The only thing I'll admit to being difficult *after* getting used to the parenthesis is the prefix notation...i.e.
(/ (+ 2 5) 4)
instead of
(2+5)/4
The only benefit of the prefix notation here is that it essentially forces parenthesis around each expression so you'll never run into an order of operation problem but...I admit, that's a trivial gain, really. Also, since code is data and data is code, you can use easily write lisp data to files and read it back without having to create your own file format. This makes it create for configuration files where you could write something like
(Window :x 25 :y 25 :width 800 :height 600 :BGcolor FFFFFF)
and then have lisp read the file and evaluate the code and (assuming you have either a Window macro or function that creates a window) you'd have a window at 25,25 that is 800x600 with a white background. Note, this is the same code you'd write within Lisp - you don't have to write some separate parser to read the config file and then call the appropriate function. Nope, you're writing the *function call itself* as the config file.
The benefits of Lisps 'syntax' (which is really more like the parse tree that a compiler might turn out, but in english) are many. Lisp macro's are unbelievably powerful. Being able to treat code as data and data as code means that Lisp can use the full power of the language when preprocessing a file. There's no need for "special syntax" for template programming ala C++. There's no need for XML, since Lisp can easily accomodate all of XML's features in the language itself (and more).
Toss in things like dynamic/strong typing, closures, first class functions (functions as variables), optional and named function arguments (i.e. you don't have to call a function with the parameters in order...you could go (CreatePlayer :name "Billy" :race "Human") if you only wanted to specify the name and race while the rest of the arguments could be set to default values (yes, I know this can be accomplished in any language but it tends to require some ugly 'hacks'). You could also go
(CreatePlayer :race "Elven" :name "Tanaros" :age 353) . As mentioned, the named (keyword) parameters can go in any order and can be omitted if desired.
So obviously, I disagree with the concept that the syntax sucks. The syntax takes a bit to get used to, but the truth is it is much less complicated than other syntaxes because it is *extremely* regular. There are no "special syntax cases" like the aforementioned template programming in C++ or required indentation ala Python. No "function/endfunction" "method/endmethod" distinctions...there are so few cases of special syntax that the only thing that you have to learn and get used to is the parenthesis. Eventually (I imagine, I'm still quite new to it) you get to the point where you don't notice or think about them.
(/ (+ 2 5) 4)
instead of
(2+5)/4
The only benefit of the prefix notation here is that it essentially forces parenthesis around each expression so you'll never run into an order of operation problem but...I admit, that's a trivial gain, really. Also, since code is data and data is code, you can use easily write lisp data to files and read it back without having to create your own file format. This makes it create for configuration files where you could write something like
(Window :x 25 :y 25 :width 800 :height 600 :BGcolor FFFFFF)
and then have lisp read the file and evaluate the code and (assuming you have either a Window macro or function that creates a window) you'd have a window at 25,25 that is 800x600 with a white background. Note, this is the same code you'd write within Lisp - you don't have to write some separate parser to read the config file and then call the appropriate function. Nope, you're writing the *function call itself* as the config file.
The benefits of Lisps 'syntax' (which is really more like the parse tree that a compiler might turn out, but in english) are many. Lisp macro's are unbelievably powerful. Being able to treat code as data and data as code means that Lisp can use the full power of the language when preprocessing a file. There's no need for "special syntax" for template programming ala C++. There's no need for XML, since Lisp can easily accomodate all of XML's features in the language itself (and more).
Toss in things like dynamic/strong typing, closures, first class functions (functions as variables), optional and named function arguments (i.e. you don't have to call a function with the parameters in order...you could go (CreatePlayer :name "Billy" :race "Human") if you only wanted to specify the name and race while the rest of the arguments could be set to default values (yes, I know this can be accomplished in any language but it tends to require some ugly 'hacks'). You could also go
(CreatePlayer :race "Elven" :name "Tanaros" :age 353) . As mentioned, the named (keyword) parameters can go in any order and can be omitted if desired.
So obviously, I disagree with the concept that the syntax sucks. The syntax takes a bit to get used to, but the truth is it is much less complicated than other syntaxes because it is *extremely* regular. There are no "special syntax cases" like the aforementioned template programming in C++ or required indentation ala Python. No "function/endfunction" "method/endmethod" distinctions...there are so few cases of special syntax that the only thing that you have to learn and get used to is the parenthesis. Eventually (I imagine, I'm still quite new to it) you get to the point where you don't notice or think about them.