ストリーム、問題3.50、問題3.51 – SICP(計算機プログラムの構造と解釈)その145
2009年04月04日
ストリームの実装の働き
通常のリストと異なり、ストリームでは cdr
は選択されるまで評価されて欲しくないので、cons-stream
は特殊形式でなければならない。
Gauche ではストリームの実装の違いから SICP の記述が上手く動作しないので、以下のサイトから stream.scm
を手に入れてストリーム手続き群を SICP の意図通りに動作するようにしておく。
SICP memo: stream.scm
参考サイト
ストリームでハマる – たぶん、駄文
考えすぎると頭がかゆくなる SICP3章の解答 3.24〜3.62
(load "./stream.scm") (define (stream-enumerate-interval low high) (if (> low high) the-empty-stream (cons-stream low (stream-enumerate-interval (+ low 1) high)))) (define (stream-filter pred stream) (cond ((stream-null? stream) the-empty-stream) ((pred (stream-car stream)) (cons-stream (stream-car stream) (stream-filter pred (stream-cdr stream)))) (else (stream-filter pred (stream-cdr stream))))) (stream-car (stream-cdr (stream-filter prime? (stream-enumerate-interval 10000 1000000)))) gosh> 10009
問題3.50
(define (stream-map proc . argstreams) (if (stream-null? (car argstreams)) the-empty-stream (cons-stream (apply proc (map stream-car argstreams)) (apply stream-map (cons proc (map stream-cdr argstreams))))))
問題3.51
(define (show x) (display-line x) x) (define x (stream-map show (stream-enumerate-interval 0 10))) gosh> 0x (stream-ref x 5) gosh> 1 2 3 4 55 (stream-ref x 7) gosh> 6 77
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542