Функция взвешивания
Интересно было бы уметь порождать потоки в каком-либо полезном порядке, а не в порядке, задаваемом к случаю придуманным процессом чередования. Можно воспользоваться методом, подобным процедуре 
merge
 из упражнения 
3.56
, если мы определим способ сказать, что одна пара целых чисел «меньше» другой. Один из способов состоит в том, чтобы определить «функцию взвешивания» 
W(i, j)
 и постановить, что 
(i₁, j₁)
 меньше, чем 
(i₂, j₂)
, если 
W(i₁, j₁) ≤ W(i₂, j₂)
. Напишите процедуру 
merge-weighted
, которая во всем подобна 
merge
, но только в качестве дополнительного аргумента принимает процедуру 
weight
, которая вычисляет вес пары, и используется для определения порядка, в котором элементы должны появляться в получающемся смешанном потоке. При помощи 
merge-weighted
 напишите процедуру 
weighted-pairs
, обобщающую 
pairs
. Она должна принимать два потока и процедуру, вычисляющую функцию взвешивания, и порождать поток пар, упорядоченных по весу. Породите, используя эту процедуру:
а. Поток всех пар натуральных чисел 
(i, j)
 где 
i ≤ j
, упорядоченных по сумме 
i + j
.
б. поток всех пар натуральных чисел 
(i, j)
, где 
i ≤ j
, ни 
i
, ни 
j
 не делится ни на 
2
, ни на 
3
, ни на 
5
, и пары упорядочены по значению суммы 
2i + 3j + 5ij
.
Комментарии отсутствуют.