7 ms·
I assume that historically it's because they were trying to keep function names short to help save memory, don't forget Lisp in one form or another has been aro
by adwf 13y ago
I assume that historically it's because they were trying to keep function names short to help save memory, don't forget Lisp in one form or another has been around for a loooong time.
A lot of the time there are more descriptive alternatives: car -> first, cdr -> rest, elt -> nth, etc... However, these are also complained about by a lot of people as unnecessarily bloating the language! (plus, elt/nth manage to invert their argument order, doh...)
So it's kind of a no-win situation really. But I like this attempt to provide a common substrate and hope that it will succeed where others have failed.
- jlarocco 13y agoActually, car and cdr in particular were named after the instructions used to implement them in IBM 704 assembly language. [1] The cryptic naming and backwards compatibility with completely out dated 40 year old systems are just a few things that drive me crazy about Lisp. [1] https://en.wikipedia.org/wiki/CAR_and_CDR
- lispm 13y agoWhy should we throw away old code? In your own code, you can use FIRST and REST for lists. But if you want to program you need to deal with that. Stuff was there before you and has a history. Changing things has a benefit, but also a cost. For a small community like Lisp, constantly rewriting code because some names change is not such a good idea. Given that we can remember thousands of words in natural languages, a few hundred core words of a programming language is not such a huge hurdle.
- mcn 13y agoAnother issue is old books. I recently got value out of PAIP and On Lisp, and I still see people recommend A Gentle Introduction to Symbolic Computation. Stepping beyond CL for a second, car and cdr have even deeper roots; for example if someone is introduced to the wider lisp-like world through SICP they will also have to become comfortable with car and cdr.
- coldtea 13y ago>Why should we throw away old code? For the same reason we move forward and left Algol in the past, relegated Cobol to some niche areas, etc.
- brudgers 13y agoThat car and cdr can be aliased easily by any Lisp programmer might lead a person to wonder why they survive and are even included in more modern Lisps such as Racket. The reason is the expressive power of their extended versions - e.g. caadr or cdaar don't have easily derived equivalents from first and rest and those that can be derived are at best equally bad or worse...ffirest and reffst anyone?
- Derbasti 13y agoWhat's wrong with "second"?
- AnimalMuppet 13y agoI presume you mean as opposed to "rest". The problem is, it really is "rest" instead of "second", at least in the usual case. Yes, a cons cell can contain pretty much any two things, but the most-frequently-used case (or so I believe) is that of a list. In that case, "car" means "first element of the list", and "cdr" means "the entire rest of the list", not "the second element of the list".
- frou_dh 13y agoPersonally I have found it useful to keep in mind that it's the pair that's fundamental and not the list. IIRC it was pg that made the point somewhere that car and cdr are acceptable because there really aren't any slam-dunk general terms for the parts of a pair.
- AnimalMuppet 13y agoTrue, and if you're thinking of them as a pair, then "first" and "second" are appropriate. But if you're using them to implement a list, then "second" is misleading.
- frou_dh 13y agoI'd probably go with "left" and "right" to get away from the implication of priority. I didn't type this using my first and second hands. (bikeshedding acknowledged)