Original JavaScript
(define wave2 (beside wave (flip-vert wave))) (define wave4 (below wave2 wave2)) $\ $ const wave2 = const wave4 = beside(wave, flip_vert(wave)); below(wave2, wave2);
Figure 2.19 Creating a complex figure, starting from the wave painter of figure 2.17.

[1] The picture language is based on the language Peter Henderson created to construct images like M.C. Escher's Square Limit woodcut (see Henderson 1982). The woodcut incorporates a repeated scaled pattern, similar to the arrangements drawn using the square-limit square_limit procedure function in this section.
[2] William Barton Rogers (1804–1882) was the founder and first president of MIT. A geologist and talented teacher, he taught at William and Mary College and at the University of Virginia. In 1859 he moved to Boston, where he had more time for research, worked on a plan for establishing a polytechnic institute, and served as Massachusetts's first State Inspector of Gas Meters.

When MIT was established in 1861, Rogers was elected its first president. Rogers espoused an ideal of useful learning that was different from the university education of the time, with its overemphasis on the classics, which, as he wrote, stand in the way of the broader, higher and more practical instruction and discipline of the natural and social sciences. This education was likewise to be different from narrow trade-school education. In Rogers's words:
The world-enforced distinction between the practical and the scientific worker is utterly futile, and the whole experience of modern times has demonstrated its utter worthlessness.
Rogers served as president of MIT until 1870, when he resigned due to ill health. In 1878 the second president of MIT, John Runkle, resigned under the pressure of a financial crisis brought on by the Panic of 1873 and strain of fighting off attempts by Harvard to take over MIT. Rogers returned to hold the office of president until 1881.

Rogers collapsed and died while addressing MIT's graduating class at the commencement exercises of 1882. Runkle quoted Rogers's last words in a memorial address delivered that same year:
As I stand here today and see what the Institute is, … I call to mind the beginnings of science. I remember one hundred and fifty years ago Stephen Hales published a pamphlet on the subject of illuminating gas, in which he stated that his researches had demonstrated that 128 grains of bituminous coal—

Bituminous coal, these were his last words on earth. Here he bent forward, as if consulting some notes on the table before him, then slowly regaining an erect position, threw up his hands, and was translated from the scene of his earthly labors and triumphs to the tomorrow of death, where the mysteries of life are solved, and the disembodied spirit finds unending satisfaction in contemplating the new and still unfathomable mysteries of the infinite future.
In the words of Francis A. Walker (MIT's third president):
All his life he had borne himself most faithfully and heroically, and he died as so good a knight would surely have wished, in harness, at his post, and in the very part and act of public duty.
[3] In square_of_four, we use an extension of the syntax of lambda expressions that was introduced in section 1.3.2: The body of a lambda expression can be a block, not just a return expression. Such a lambda expression has the shape ($parameters$) => { $statements$ } or $parameter$ => { $statements$ }.
[4] Equivalently, we could write
Original JavaScript
(define flipped-pairs (square-of-four identity flip-vert identity flip-vert)) const flipped_pairs = square_of_four(identity, flip_vert, identity, flip_vert);
[5] Rotate180 The function rotate180 rotates a painter by 180 degrees. Instead of rotate180 we could say (compose flip-vert flip-horiz), compose(flip_vert, flip_horiz), using the compose compose procedure function from exercise 1.42.
[6] Frame-coord-map The function frame_coord_map uses the vector operations described in exercise 2.47 below, which we assume have been implemented using some representation for vectors. Because of data abstraction, it doesn't matter what this vector representation is, so long as the vector operations behave correctly.
[7] Segments->painter The function segments_to_painter uses the representation for line segments described in exercise 2.49 below. It also uses the for-each for_each procedure function described in exercise 2.24.
[8] For example, the rogers painter of figure 2.18 was constructed from a gray-level image. For each point in a given frame, the rogers painter determines the point in the image that is mapped to it under the frame coordinate map, and shades it accordingly. By allowing different types of painters, we are capitalizing on the abstract data idea discussed in section 2.1.3, where we argued that a rational-number representation could be anything at all that satisfies an appropriate condition. Here we're using the fact that a painter can be implemented in any way at all, so long as it draws something in the designated frame. Section 2.1.3 also showed how pairs could be implemented as procedures. functions. Painters are our second example of a procedural functional representation for data.
[9] Rotate90 The function rotate90 is a pure rotation only for square frames, because it also stretches and shrinks the image to fit into the rotated frame.
[10] The diamond-shaped images in figures 2.17 and 2.18 were created with squash-inwards squash_inwards applied to wave and rogers.
[11] Section 3.3.4 describes one such language.
2.2.4   Example: A Picture Language