3 ms·
Personally I love the response that Peter gave, especially the revision "my other CAR is a CADR. CDR isn't a CAR at all"
by technologia 9y ago
Personally I love the response that Peter gave, especially the revision "my other CAR is a CADR. CDR isn't a CAR at all"
- gm-conspiracy 9y agoCDR is the "input" to CADR and the result is CAR?
- ball_of_lint 9y agoNot 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.
- ambulancechaser 9y agosomeone mentioned it earlier but it's not true that cdr always returns a list, for instance, `(cdr `(1 . 2))`
- kaushalmodi 9y agoIf 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 ..))`.
- dreamcompiler 9y agoTo 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.