Давайте подумаем об этом так:
Слишком большой поток целых чисел, мы бы хотели сделать
(define (integers-starting-from n)
(cons-stream n (integers-starting-from (+ n 1))))
Это как-то так (для начала с n = 1):
(+1 +2 +3 +4 +5 ...)
Теперь давайте предположим, что мы берем все элементы со второго места и инвертируем их знак:
(+1 -2 -3 -4 -5 ...)
Давайте сделаем то же самое для третьего места и для:
(+1 -2 +3 +4 +5 ...)
Повторите еще два раза, каждый раз начиная со следующего места:
(+1 -2 +3 -4 -5 ...)
(+1 -2 +3 -4 +5 ...)
Как мы видим, если после каждого элемента мы добавляем остаток целочисленного потока, после инвертирования его знака (инвертирования знака остальной части потока), мы получим именно то, что вы хотели - поток целых чисел с знаковые знаки Каждый раз, когда мы используем stream-map
с -
в остальной части потока, чтобы инвертировать его знак, где «остаток потока» - это просто поток, начинающийся с (+ n 1)
.
Сверните все это с cons-stream
, и вы должны иметь это.