The LispLanguage seems powerful and intriguing. How would the good WikiZens suggest one would go about starting with it? (Maybe this page should have been named IwannaBeaSmugLispWeenie.)
To get an idea of how to read Lisp code in the below materials, see LispIndentation.
Major Proprietary CommonLisp implementations with free trials; work on Windows
Other Lisp Learning resources
Aside from the libraries, how different are the languages themselves?
Different enough to be incompatible. ;-)
For those of us considering playing around with either CLisp, CMUCL or SBCL, which would be recommended for a beginner?
If you just want to play around, I suggest getting Lisp in a Box, as it includes everything you need (IDE, etc.) in a single, easy-to-install package.
All of the above are fine for learning Lisp. My preference would be CMUCL or SBCL. But you can also can download AllegroCommonLisp from Franz and the LispWorks personal edition for several platforms. Especially LispWorks has an IDE written in Lisp. Such an IDE might be helpful for learning Lisp development (debugger, inspector, editor, stepper, etc. as GUI-based tools).
If you decide to go the open-source way, you'll still need an IDE. The canonical way to do that, recently, has been to use Emacs+Slime+SBCL. For more information, see http://www.cliki.net/Slime
I suggest that the discussion about the differences between SchemeLanguage and CommonLisp be better discussed on another page (maybe there is already one). Learning about the differences is surely interesting (for example for choosing which Lisp dialect to learn), but does not really help much in learning to program in Lisp. ;-)
Much discussion moved to LispSchemeDifferences.
Any comments on EmacsLisp? I always wanted a super-charged editor that I can customize all kinds of features into. It might be a good road to start Lisp.
One way to speed up learning Lisp/Scheme is to put it on your HandHeld. LispMe for Palm, PocketScheme for PocketPc. Then while waiting on the bus or other idle time you can experiment.
Too many parenthesis and you blow the stack, zapping your neighbour's pace maker :-)
Recognizing Function Calls
One thing I seem to have a problem with as a Lisp beginner is knowing whether something is a list or a function call when visually scanning code. Often one cannot tell the difference without knowing the context. For example, a LET statement (in EmacsLisp) may have a set of variables to assign values to. One cannot tell which is a variable assignment and which is a function call without first finding the LET. This is not something I ever had to do with "normal" programming languages [1], so I am at odds on how to overcome it. Or, is it just an inherent shortcoming of Lisp that is compensated for in other ways?
[1] The one exception was arrays versus functions in MS Basic dialects. Some call it "polymorphism" to justify it. I guess I half agree since I had to switch implementation from arrays to function calls a few times and it came in handy.
With practice this becomes easier. You'll learn to quickly recognize macros like LET by their indentation style. With a good editor you should also have the source and documentation for everything at your fingertips when you want to look something up, and even have some information (like function/macro argument lists) automatically displayed. That helps tremendously while you familiarize yourself with new functions and macros.
In EmacsLisp, try 'M-x eldoc-mode' to automatically see documentation for the function/macro at point, and 'M-x find-function' to jump to the sources to the function called at point. And don't miss Emacs's comprehensive built-in online help system, described at http://www.gnu.org/software/emacs/manual/html_chapter/emacs_10.html#SEC42
Special Characters
Different dialects seem to have different symbols as operators or markers of some sort, such as dots, colons, etc. Is there a pattern or brief catalog of what these mean and which dialects support them?
Yes, somewhere on http://www.cliki.net/
I was wondering if there is not a simplified "Lisp lite" language out there that is nothing but lists. No single quoting, colons, etc. One would use Eval on strings instead of symbols (single quote). I realize it may run slower, but that is the tradeoff for being "lite".
I am a Lisp newbie and just kicking around ideas, so forgive me if it is a naive question. I have a habit of learning by asking weird questions.
The things that you mention are already much closer to standard Lisp than you would think. For instance, single quote has always just been an abbreviation for the special form (quote ...), and the only thing that differs between strings and symbols is how they are eval'ed.
So although it may seem you are suggesting a "Lisp lite" dialect, actually that's still just Lisp.
There are, of course, ultra-tiny implementations of Lisp, such as the classic eval-written-in-Lisp that tends to be presented as part of every intro to Lisp course and book.
You may also want to check out SchemeLanguage, which is designed to be simple and minimalistic. It has no keyword args, no GenericFunctions, no GeneralizedReferences, and a different macro system. Still has quoting (which, as mentioned above, merely expands to the form (QUOTE ...)), but that's necessary in any language where CodeIsData. The naming conventions are also more logical than in CommonLisp.
There's also GooLanguage, which is Scheme + object orientation (in the form of generic functions). This is a research project from MIT, and is also supposed to be a simple language suitable for teaching. Unfortunately, the function names in it can be a bit cryptic.
Depending on what you mean by "simple", PaulGraham has been working on ArcLanguage, a "simplified" version of CommonLisp. While more complex than SchemeLanguage, ArcLanguage seeks to remove a lot of the "cruft" from CommonLisp.
Lisp blog: http://lemonodor.com/
I wonder how many other languages have a blog? -- DavidCary
I'm a PerlLanguage, PythonLanguage, and EmacsLisp hacker with some experience in SchemeLanguage, so neither basic lisp, lexical scoping, nor closures are really foreign to me. I've written some really powerful EmacsLisp, but what I want to learn is how I can start using a lisp environment like SBCL to replace a lot of my one-offs in perl and python. Let me give you a few of the one-offs I'm talking about:
See also: IwannaLearnScheme