Scheme is an offshoot of a language family that began with a language
called LISP. LISP was first implemented in 1959 on an IBM 704, and this
implementation was the first to use the names car and cdr for
the components of a non-null list.
The instruction set for the processor in the IBM 704 included some looping instructions containing two relatively large (fifteen-bit) fields. One of these, the ``address'' field, usually held the address of some storage location in the 704's memory. The other, the ``decrement'' field, usually held an offset to be subtracted from this address for indexing purposes, such as traversing an array element by element. The 704 also provided instructions for loading either of these fields from memory into a register inside the processor and for storing either of them from a register into memory.
Steve Russell, the graduate student who created this implementation of LISP, chose to represent lists in a way that exploited these special loading and storing instructions. He put information about the location of the first element of a non-null list in the address field and information about the location of the rest of that list in the decrement field. Having made that decision, Russell writes,
Because of an unfortunate temporary lapse of inspiration, we couldn't think of any other names for the 2 pointers in a list node than ``address'' and ``decrement,'' so we called the functions CAR for ``Contents of Address of Register'' and CDR for ``Contents of Decrement of Register.''
These arbitrary names quickly became conventional, then traditional, and finally venerable, so that decades later we are still using them, even though the instruction sets for modern processors bear little resemblance to that of the IBM 704.