One mostly only adds new words to these languages: nouns and verbs. With Lisp you can add new syntax as a user as part of the program. This allows us to do code transformations at compile time as part of a program. This allows us relatively straight forward to generate more complex code from simpler descriptive code.
"With Lisp you can have any syntax, as long as it looks like Lisp."
CL-USER 14 > (loop for i from 0 below 10
sum i into isum
when (evenp i) sum i into evensum of-type integer
else when (oddp i) sum i into oddsum
finally (return (* isum evensum oddsum)))
(1 * 2 ^ 3 + 1) is a valid s-expression, but not a valid Lisp program. With an INFIX macro it could be:
(infix 1 * 2 ^ 3 + 1) could be a valid Lisp program, with a corresponding infix macro.
But the Lisp syntax still is on top of the s-expression syntax...
It's what EFCore does, translates C# method calls into SQL statements via lambdas bound to expression trees.
So, no, LISP is not special in that regard.
It's just MUCH MUCH easier, standardized and widely used.
For routine code generation, there are even simpler T4 templates. That one gets as easy as one could want.
So are expression trees: https://docs.microsoft.com/en-us/dotnet/api/system.linq.expr...
> and widely used
By what statistics?
But they are not easier. Pick one or two out of three.
> By what statistics?
Number of defined or used macros per lines of Lisp code.