SICP 4.4.4.5 Ex. 4.72

  • 投稿日:
  • カテゴリ:

Ex. 4.72

一応ヒントを確認する。

3.5.3節 interleave を使う理由 p202 → 2つの無限ストリームを、偏らずに交互に取り出すため。

なので、やはり前問と同じく、まっとうな答えは、無限ループをまともに扱えないシステムが、無限ストリームを考慮してコーディングしてもまったくもって意味がない。というものである。

一応、ここも前向きに考えて、将来の修理のために、無限ストリームを遅延させようとしていると考えよう。

この目的の場合 (append A (delay B)) だと、Bの無限ストリームは遅延できるが、Aの無限ストリームは遅延できない。ので不十分である。

一方 (interleave A (delay B)) だと、(A1 B1 A2 B2 ...) と交互に取り出すため、Bを遅延させるだけで、Aの無限ストリームも遅延させることができる。

なお、この目的のためなら (append (delay A) (delay B)) でもいい筈である。(Aばっかりとりだすというのは望ましくはないが、無限ストリームに対処するための修理という目的にはかなう筈)

(なお、無限ストリームは rule によってのみ発生する。表明は有限個しかない。)