関数型言語の勉強にSICPを読もう - (47) 3章 - 標準部品化力、オブジェクトおよび状態 (191ページ)

4章を先読みとかしているくせに、全然3章が進んでいないので反省中。
今日は問題3.50が解けるまで寝ない!と決めたらわりとすぐに解けた。

問題3.50

cons-streamや、stream-carをまだ定義していなくて、テストができないので cons/carで実装してみた。

(define (hige-map proc . argstreams)
  (if (null? (car argstreams))
      '()
      (cons
       (apply proc (map car argstreams))
       (apply hige-map
              (cons proc (map cdr argstreams))))))

(display (hige-map + (list 1 2 3) (list 4 5 6)))

mapに car や cdr を渡すところが思いつくのに時間のかかった部分だった。
ということで答えは↓のようになるかと。

(define (stream-map proc . argstreams)
  (if (null? (car argstreams))
      '()
      (cons-stream
       (apply proc (map car argstreams))
       (apply stream-map
              (cons proc (map cdr argstreams))))))


※「SICPを読もう」の目次はこちら


計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404