SICP問題3.68
Louis Reasonerが定義したpair手続き
(define (pairs s t) (interleave (stream-map (lambda (x) (list (stream-car s) x)) t) (pairs (stream-cdr s) (stream-cdr t))))
この定義は動くか?Louis の piars 手続きを使って(pairs integers integers)を評価すると何が起きるか?
実際に以下のように実行すると
(stream-ref-range (pairs integers integers) 0 50)
結果は返って来ない。
これはinterleave の第二引数としてpairsが再帰的に呼び出されるが、元の実装のように cons-stream 等で delay をかけていないため、pairsが即座に評価され、再度pairsが呼び出されるという無限ループとなり、結果が返って来ないためである。