2014年8月10日日曜日

開発環境

計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の3(標準部品化力、オブジェクトおよび状態)、3.5(ストリーム)、3.5.2(無限ストリーム)、ストリームの暗黙の定義、問題 3.62.を解いてみる。

その他参考書籍

問題 3.62.

コード(BBEdit, Emacs)

sample62.scm

#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-

(load "./stream.scm")

(define (enumerate-interval low high)
  (if (> low high)
      '()
      (cons low
            (enumerate-interval (+ low 1)
                                high))))

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

(define (invert-unit-series stream)
  (cons-stream 1
               (mul-series (stream-cdr stream)
                           (scale-stream (invert-unit-series stream)
                                         -1))))

(define (div-series s1 s2)
  (let ((s2car (stream-car s2)))
    (if (= s2car 0)
        (error "a constant term is zero -- DIV-SERIES" s2car)
        (let ((a (/ 1 s2car)))
          (mul-series (scale-stream s1 a)
                      (invert-unit-series (scale-stream s2 a)))))))

(define cosine-series
  (cons-stream 1
               (scale-stream (integrate-series sine-series)
                             -1)))

(define (integrate-series stream)
  (stream-map / stream integers))

(define sine-series
  (cons-stream 0
               (integrate-series cosine-series)))

(define tangent-series (div-series sine-series
                                   cosine-series))

(for-each (lambda (n)
            (print (stream-ref tangent-series n)))
          (enumerate-interval 0 9))

入出力結果(Terminal(gosh), REPL(Read, Eval, Print, Loop))

$ ./sample62.scm
0
1
0
1/3
0
2/15
0
17/315
0
62/2835
$

0 コメント:

コメントを投稿