このように考えてみましょう:
整数の無限のストリームを生成しすぎると、
(define (integers-starting-from n)
(cons-stream n (integers-starting-from (+ n 1))))
これは次のようなものになります(n = 1から開始する場合):
(+1 +2 +3 +4 +5 ...)
ここで、2番目の場所からすべての要素を取得し、それらの符号を反転するとします。
(+1 -2 -3 -4 -5 ...)
3位以降も同じようにしましょう。
(+1 -2 +3 +4 +5 ...)
次の場所から開始するたびに、さらに2回繰り返します。
(+1 -2 +3 -4 -5 ...)
(+1 -2 +3 -4 +5 ...)
ご覧のとおり、各要素の後に残りの整数ストリームを追加すると、その符号を反転した後(残りのストリームの符号を反転)、正確に必要なもの、つまり交互の符号を持つ整数のストリームが得られます。stream-map
ストリームの残りの部分でwithを使用して符号を反転するたび-
に、「ストリームの残りの部分」はから始まるストリームになります(+ n 1)
。
それをすべてまとめればcons-stream
、あなたはそれを持っているはずです。