On Jun 13, 2006, at 4:46 PM, Derek Davis wrote:

On 6/13/06, Gregory Hill <[EMAIL PROTECTED]> 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).


Greg

Derek

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.

                        --Levi

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to