SICP — Scheme/JS Structure and Interpretation of Computer Programs — Comparison Edition

[1] The name cons stands for construct. The names car and cdr derive from the original implementation of Lisp on the IBM 704. That machine had an addressing scheme that allowed one to reference the address and decrement parts of a memory location. Car stands for Contents of Address part of Register and cdr (pronounced could-er) stands for Contents of Decrement part of Register.
[2] Another way to define the selectors and constructor is
Original Python
(define make-rat cons) (define numer car) (define denom cdr) make_rat = pair numer = head denom = tail
The first definition associates the name make-rat make_rat with the value of the expression cons, pair, which is the primitive procedure function that constructs pairs. Thus make-rat make_rat and cons pair are names for the same primitive constructor.

Defining selectors and constructors in this way is efficient: Instead of make-rat make_rat calling cons, pair, make-rat make_rat is cons, pair, so there is only one procedure function called, not two, when make-rat make_rat is called. On the other hand, doing this defeats debugging aids that trace procedure function calls or put breakpoints on procedure function calls: You may want to watch make-rat make_rat being called, but you certainly don't want to watch every call to cons. pair.

We have chosen not to use this style of definition in this book.

[3] Display is the Scheme primitive for printing data. The Scheme primitive newline starts a new line for printing. Neither of these procedures returns a useful value, so in the uses of print-rat below, we show only what print-rat prints, not what the interpreter prints as the value returned by print-rat.
2.1.1   Example: Arithmetic Operations for Rational Numbers