目的は n 番目の要素が になるような無限ストリーム factorials を作成すること.
まずは,2 つのストリームを掛け合わせる
まずは,2 つのストリームを掛け合わせて,新しい無限ストリームを作るような関数 mul-stream をこさえます.
(define (mul-stream s1 s2) (stream-map * s1 s2))
こさえると言っても,add-stream の演算子を変えただけだし,このあたりになると add-stream と mul-stream の共通部分を括り出してもよさそうな気がしますね! SICP でもたしか第一章で似たような話をやってたなー.
そして目的の無限ストリーム factorials を作る
; n から始まる整数の無限ストリームを構成 (define (integers-starting-from n) (cons-stream n (integers-starting-from (+ n 1)))) ; ゴール (define factorials (cons-stream 1 (mul-stream factorials integers)))) (stream-car factorials) ; 1 (stream-cadr factorials) ; 1 (stream-caddr factorials) ; 2 (stream-cadddr factorials) ; 6