2013年8月8日木曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の3(標準部品化力, オブジェクトおよび状態)、3.5(ストリーム)、3.5.1(ストリームは遅延リスト)、ストリームの実装の働き、delayとforceの実装、問題 3.60、問題 3.61、問題 3.62を解いてみる。

その他参考書籍

問題 3.60

コード(BBEdit)

sample.scm

(define (mul-series s1 s2)
  (cons-stream (* (stream-car s1)
                  (stream-car s2))
               (add-streams (scale-stream (stream-cdr s1)
                                          (stream-car s2))
                            (mul-series s1
                                        (stream-cdr s2)))))

問題 3.61

コード(BBEdit)

sample.scm

(define (invert-unit-series s)
  (cons-stream 1
               (stream-map (lambda (x) (* -1 x))
                           (mul-series (stream-cdr s)
                                       (invert-unit-series s)))))

問題 3.62

コード(BBEdit)

sample.scm

(define (div-series s1 s2)
  (let ((a (stream-car s2)))
    (if (= a 0)
        (error "Division by zero")
        (mul-series s1
                    (scale-stream (invert-unit-series 
                                   (scale-stream s2 (/ 1 a)))
                                  a)))))

;; 正接のべき級数 
(define tangent-series (div-series sine-series
                                   cosine-series))                      

0 コメント:

コメントを投稿