[OT] Lisp IS fun! was Re: Who modified my local variable?
levi at cold.org
Tue Jun 13 17:04:28 MDT 2006
On Jun 13, 2006, at 4:46 PM, Derek Davis wrote:
> On 6/13/06, Gregory Hill <Gregory_Hill at tni.com> wrote:
>> I meant the 2nd half of the list, Ruby/Python/Perl. I've actually
> To be clear for the Lisp guy, you probably should have said
> something more like
> cdddr(C, C++, Java, ruby, python, perl).
> P.S. I know, the syntax is probably wrong. That wasn't the point, so
> I didn't bother to look it up. :)
It was close!
(cdddr '(C C++ Java Ruby Python Perl))
=> (Ruby Python Perl)
Lisp Trivia: The functions car and cdr in Lisp come from the
assembly language mnemonics 'Contents of Address Register' and
'Contents of Decrement Register' that were used on the machines that
early lisps were programmed on. Since a lisp list is a linked list
of data pairs (called cons pairs in lisp lingo), the car instruction
grabbed the first item and the cdr instruction grabbed the pointer to
the next pair. Thus, the names made perfect sense for those early
implementations. So, why do we still use them?
Well, the above example is probably a big part of it. Lisp allows
you to compose multiple car and cdr operations into a single
expression by adding arbitrary a's and d's between the c and r.
There are now aliases 'first' and 'rest' for 'car' and 'cdr', but
they don't compose like car and cdr do. Peter Norvig, in his style
guide, also suggests using the new aliases when referring to data
that is meant to be a list, and car/cdr when the data is meant to be
a tree or some other structure in order to bettery convey intent.
More information about the PLUG