* * * * * (l (i (s (p () (i (s () (f (u (n))))))))) My first exposure to Lisp [1] was in the summer of '86 in an introductory class on artificial intelligence [2]. My impression of the language was that it was mildly interesting but littered with CARs, CDR [3]s and parentheses. Lots of parentheses. [4] It also doesn't bode well when a typical fragment of Lisp looks like: -----[ Lisp ]----- (DEFUN VALID-RANGE (LIST) (IF (NUMBERP (CAR LIST)) (LET ((MIN (CAR LIST)) ;gets SETQed below (MAX (CAR LIST))) ;gets SETQed below (DO ((ELS (CDR LIST) (CDR ELS))) ((NULL ELS) (LIST MIN MAX)) (LET ((CAND (CAR ELS))) (COND ((NOT (NUMBERP CAND)) (RETURN 'INVALID)) ;; at most one of the next ;; two cases can occur. ((< CAND MIN) (SETQ MIN CAND)) ((> CAND MAX) (SETQ MAX CAND)))))) 'INVALID)) -----[ END OF LINE ]----- Someone well versed in Lisp would be able to see what that does (much like someone well versed in Perl would be able to tell what $data =~ m/^211\s+\d+\s+(\d+)\s+(\d+)\s/; does—maybe). But after reading Paul Graham's [5] article about using Lisp for web-based applications [6] and hearing the remark that XML (eXtensible Markup-Language) is nothing more than Lisp in drag, I figured it may be time to give Lisp another look. Obligatory Sidebar Links P a u l G r a h a m [7] An Introduction and Tutorial for Common Lisp [8] The Association of Lisp Users [9] Successful Lisp [10] Schemers.org [11] cons.org [12] The two major dialects of Lisp today are Scheme [13] and Common Lisp [14]. Since Scheme is conceptually simpler and cleaner than Common Lisp, I decided to give it a try. The MIT version (Massachusetts Institute of Technology) [15] requires one to already have the MIT version (Massachusetts Institute of Technology) [16] installed before you can install the MIT version (Massachusetts Institute of Technology) [17] (and that's another lovely feature about Lisp—recursion [18] to an infinite degree (or until you run out of memory)). Off to try Common Lisp. Oddly enough, the CMUCommon Lisp (Carnegie Mellon University) [19] also requires an installation of CMUCommon Lisp (Carnegie Mellon University) [20] before you can install CMUCommon Lisp (Carnegie Mellon University) [21]. Lovely. Fortunately, Gnu (Gnu's Not Unix) [22] (which itself is a recursive ancronym) has both a version of Scheme [23] and Common Lisp [24] that don't require a pre-existing installation to install. Another thing I've come to realize is that Lisp, much like C++ [25], accreted features over it's current 54 year history so quite a bit of arcana [26] is needed to successfully write programs in it. Then again, the principles underlying Lisp are so simple that, like Forth, one can implement a Lisp system (functioning, if limited) in a few days of work so maybe that's the way I should proceed. [1] http://www.lisp.org/table/lisp.htm [2] http://www.robotwisdom.com/ai/ [3] http://www.tuxedo.org/~esr/jargon/html/entry/cdr.html [4] http://www.tuxedo.org/~esr/jargon/html/entry/LISP.html [5] http://www.paulgraham.com/paulgraham/bio.html [6] http://www.paulgraham.com/lib/paulgraham/bbnexcerpts.txt [7] http://www.paulgraham.com/ [8] http://www.apl.jhu.edu/~hall/lisp.html [9] http://www.lisp.org/table/contents.htm [10] http://www.psg.com/~dlamkins/sl/cover.html [11] http://www.schemers.org/ [12] http://www.cons.org/ [13] http://www.scheme.org/ [14] http://www.cons.org/cmucl/ [15] http://www.swiss.ai.mit.edu/projects/scheme/mit/ [16] http://www.swiss.ai.mit.edu/projects/scheme/mit/ [17] http://www.swiss.ai.mit.edu/projects/scheme/mit/ [18] http://www.tuxedo.org/~esr/jargon/html/entry/recursion.html [19] http://www.cons.org/cmucl/download.html [20] http://www.cons.org/cmucl/download.html [21] http://www.cons.org/cmucl/download.html [22] http://www.gnu.org/ [23] http://www.gnu.org/software/guile/ [24] http://www.gnu.org/software/gcl/ [25] http://www.mozilla.org/hacking/portable-cpp.html [26] http://www.elwood.com/alu/table/style.htm Email Sean Conner at sean@conman.org .