* * * * *
(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 author at
[email protected]