[1] We can't use let to bind the local variable guesses, because the value of guesses depends on guesses itself. Exercise 3.63 addresses why we want a local variable here.
[2] As in section 2.2.3, we represent a pair of integers as a list rather than a JavaScript pair.
[3] See exercise 3.68 for some insight into why we chose this decomposition.
[4] The precise statement of the required property on the order of combination is as follows: There should be a function $f$ of two arguments such that the pair corresponding to element $i$ of the first stream and element $j$ of the second stream will appear as element number $f(i,j)$ of the output stream. The trick of using interleave to accomplish this was shown to us by David Turner, who employed it in the language KRC (Turner 1981).
[5] We will require that the weighting function be such that the weight of a pair increases as we move out along a row or down along a column of the array of pairs.
[6] To quote from G. H. Hardy's obituary of Ramanujan (Hardy 1921): It was Mr. Littlewood (I believe) who remarked that every positive integer was one of his friends. I remember once going to see him when he was lying ill at Putney. I had ridden in taxi-cab No. 1729, and remarked that the number seemed to me a rather dull one, and that I hoped it was not an unfavorable omen. No, he replied, it is a very interesting number; it is the smallest number expressible as the sum of two cubes in two different ways. The trick of using weighted pairs to generate the Ramanujan numbers was shown to us by Charles Leiserson.
3.5.3 Exploiting the Stream Paradigm