Функция взвешивания

Интересно было бы уметь порождать потоки в каком-либо полезном порядке, а не в порядке, задаваемом к случаю придуманным процессом чередования. Можно воспользоваться методом, подобным процедуре 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 .


Комментарии отсутствуют.

Необходима авторизация

Вы должны авторизоваться для создания комментария.

Вход