Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Personally I love the response that Peter gave, especially the revision "my other CAR is a CADR. CDR isn't a CAR at all"


To me the original makes more sense. A cons cell is a 2-tuple. CAR retrieves the first element; CDR retrieves the "other" one. The fact that CARs are usually atoms and CDRs are usually lists is a convention, not a rule. You can easily put an atom in the CDR of a cons (this is called a dotted pair) and you can easily put a list in the CAR.


CDR is the "input" to CADR and the result is CAR?


If you have a list `(Odyssey Model-S)`, `car` will be `Odyssey`, `cdr` will be a list `(Model-S)`. You yet need to do a `car` on that.. So `(car (cdr ..))` will give you `Model-S`. `(cadr ..)` is short for `(car (cdr ..))`.


Not exactly, cadr is what you would get if you called CDR on a list, then car on the result of that. Lisp has several of these types of chains.

Since cdr always returns a list, to get a single item you would need to call car on it, therefore cadr.


someone mentioned it earlier but it's not true that cdr always returns a list, for instance, `(cdr `(1 . 2))`




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: