[1] In practice, we provide these functions in a library and make sure that the library is loaded whenever we need them. One way of defining these functions is to use arrays, one of JavaScript's primitive data structures.
[2] 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.

[3] The primitive function display is our facility for printing data. In our implementation of print_rat, we display a rational number by printing its denominator in one line, a dash in the nexty line and its numerator in the last line.
2.1.1 Example: Arithmetic Operations for Rational Numbers