I’ve been playing a little with learning Lisp (not that I’ve much free time, but hey, what the hell). This example, taken from Dave Lamkins’ Successful Lisp), more than any other that I’ve seen so far, expresses the power of the language.
1 2 3 4 |
|
Here’s what’s happening: we’re redefining the syntax of the language dynamically! Normally, if I type [1 2 3]
into a Lisp interpreter it will raise an error, something along the lines of variable [1
has no value, but after running that little code snippet I can now type [1 2 3]
and it will create a three element list populated with the numbers 1, 2, and 3. Here’s the equivalent in a Java like syntax.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Then writing List foo = [1 2 3 bar]
would yield a new ArrayList
populated with 3 Double
objects and a string. Even with my friendly psuedo-code it’s a lot more work, but to actually do this is impossible.
I assume that this is what folks like Paul Graham mean when they say things like ‘If you re writing a text-editor, you can turn Lisp into a language for writing text-editors. If you re writing a CAD program, you can turn Lisp into a language for writing CAD programs’ and it strikes me as an amazingly powerful concept. I think I really like this language.