Subject: Re: Lisp or SCheme
From: rpw3@rpw3.org (Rob Warnock)
Date: Fri, 02 Feb 2007 03:37:12 -0600
Newsgroups: comp.lang.lisp
Message-ID: <HvmdnRN5TtbVm17YnZ2dnUVZ_r2onZ2d@speakeasy.net>
Jens Axel S�gaard  <usenet@soegaard.net> wrote:
+---------------
| Thomas A. Russ skrev:
| > For practical use as a programming language, I would recommend Common
| > Lisp, since it is a larger language with more general tools available.
| 
| Which general tools are you thinking of?
+---------------

Dunno which ones Thomas meant, but what pulled *me* from Scheme to
CL were things like these, all nicely pre-compiled & optimized in
any conforming implementation:

    - DEFMACRO (which for the things I do is IMHO nicer than SYNTAX-RULES)
    - The almost-universal provision of :START/:END (and :START1/:END1/
      :START2/:END2, when appropriate) keyword args on sequence functions.
    - MAKE-HASH-TABLE, GETHASH, (SETF GETHASH), & REMHASH
    - Specialized vectors & multi-dimensional arrays.
    - POSITION, MISMATCH, SEARCH, & SUBSEQ (*especially* MISMATCH,
      which is really a sort of "match-until" operation)
    - PARSE-INTEGER (in all its glory)
    - CONCATENATE, COERCE, MAP
    - READ-FROM-STRING & WITH-INPUT-FROM-STRING
    - FORMAT & WITH-OUTPUT-TO-STRING
    - LOOP (especially using multiple iteration variables; automatic
      destructuring of iteration variables; and COLLECT & COLLECT INTO)
    - READ (to load config files & small ad-hoc databases)
    - Reader macros (especially the ability to write a "0x"-reading macro)

Not in the ANSI CL standard, but readily-available as add-ons
(just to name a very few):

    - HTOUT & CL-WHO &c. HTML-generating macros
    - CLX, Ltk, & other GUI tools.
    - PG & CL-SQL (connections to SQL databases)
    - SPLIT-SEQUENCE & CL-PPCRE (fast regexps)
    - CL-PDF & CL-TYPESETTING document generators/formatters.

Other people may have other favorites.


-Rob

p.s. My experience is that MISMATCH is one of the most under-recognized
or under-appreciated functions in CL, at least by newbies such as I was.
It works *very* nicely with POSITION, so well that I very seldom have to
resort to regexps for parsing text files. And using :START{,1,2}/:END{,1,2}
to constrain the searches/matches allows most string parsing to be done
"in-place", lessening the need to cons up transient temps with SUBSEQ.

p.p.s. CL *does* have FILTER, except it's called REMOVE-IF-NOT.

-----
Rob Warnock			<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607