SQL is interesting because it forces you to think in terms of sets. And because it wants you to tell it what to do but not how to do it.
Lisp is interesting because:
It is expressed in one of its own primary data types: the list.
But the thing that reads Lisp -- the Lisp reader, is itself programmable. So if you want it to understand JSON syntax for example, or maybe Python dictionary literals -- you can write reader macros to add the new syntax.
And of course because it can manipulate data stored in lists, that means it can manipulate source code. Code in Lisp, is data. And data can be code if you need it to. That's essentially what Lisp macros are: code that writes code on the fly.
The backquote facility. This is basically a little template language for rewriting data structures on the fly. It is the killer feature that, along with the reader, enables the killer feature lispers won't shut up about.
The condition system. It separates signaling of conditions (including errors) from the decision about how to deal with them. One implication of this is that when an error is reached, you need not unwind the stack to handle it.
And because it is pretty.
Of course. I was asking for personal opinions. This question cannot be answered objectively.
Agreed on both sets and being declarative for SOL.
I did know about the fact that code is data (everything is a list) and so Lisp programs can write programs, parse their own code more easily than other languages can, etc.
Didn't know the reader was programmable. Do remember reading a PG article, where I think he said in Lisp, reading can be done compile or run time, compiling at read or run time, and so on - all 3 possibilities. Not sure what the uses of those are though, since I don't know Lisp much. Find it interesting, though, for sure. I've read some of Practical Common Lisp by Peter Seibel, and parts of a few other small tutorials. Do you have any other recommendations? Also, what Lisp would you recommend for someone learning it, in the early stages?
Didn't know about the backquote facility or that point about the Lisp condition system. Will check it them.
Thanks for all the info.
I'm partial to Common Lisp and I think it fits the brain pretty easily.
But Racket is a good choice too. There is a nice, friendly development environment and plenty of libraries and learning materials.
> Do you have any other recommendations?
Sure. Check out SNOBOL: http://www.snobol4.org
Oh, and Pharo Smaltalk is definitely worth looking at, imo.
On a related note, Go is the most utterly uninteresting language I've encountered in recent memory. Depending on where you're standing, that can be an argument in its favor.
Actually Tcl more than a little, in the context of Expect, and also some with Tk (and Tkinter in Python, though that is about the toolkit, not the Tcl language). Tcl definitely is mind-blowing in its dynamic nature. So are the capabilities of Expect, actually. I read most of the Expect book by its author, Don Libes. He goes very deep into it. Fascinating. Even his writing style is unique.
Cool.
Ah yes, memories coming back a bit now. (Had read both the Ousterhout (Tcl and Tk) and Libes (Expect) books years ago.) I remember that though the Libes book is about Expect, he does go into talking about Tcl a lot, including some of the advanced features you mention (though always or a lot, in the context of how they are used in Expect).
I guess part of its (Tcl's) dynamic nature comes from the fact that everything in Tcl is a string (and the quoting and the ability to evaluate expressions), like everything in Lisp is a list (or an atom).