[1]
Another way to define the selectors and constructor is
const make_rat = pair;
const numer = head;
const denom = tail;
The first definition associates the name make_rat with the value of the expression pair, which is the primitive function that constructs pairs. Thus make_rat and pair are names for the same primitive constructor.

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

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

[2]
In JavaScript, the operator + can also be applied to a string and a number and to other operand combinations, but in this book, we choose to apply it either to two numbers or to two strings.
[3]
The primitive function display introduced in exercise 1.22 returns its argument, but 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