2014年8月12日火曜日

開発環境

計算機プログラムの構造と解釈[第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.3(ストリームパラダイムの開発)、反復をストリームプロセスとして形式化する、問題 3.64.を解いてみる。

その他参考書籍

問題 3.64.

コード(BBEdit, Emacs)

sample64.scm

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

(load "./stream.scm")

(define (stream-limit stream tolerance)
  (let ((a (stream-car stream))
        (b (stream-car (stream-cdr stream))))
    (if (< (abs (- a b))
           tolerance)
        b
        (stream-limit (stream-cdr stream)
                      tolerance))))

(define (average a b) (/ (+ a b)
                         2))

(define (sqrt-improve guess x)
  (average guess (/ x guess)))

(define (sqrt-stream x)
  (define guesses
    (cons-stream 1.0
                 (stream-map (lambda (guess)
                               (sqrt-improve guess x))
                             guesses)))
  guesses)

(define (sqrt x tolerance)
  (stream-limit (sqrt-stream x)
                tolerance))

(print (sqrt 2 0.1))
(print (sqrt 2 0.00001))

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

$ ./sample64.scm
1.4166666666666665
1.4142135623746899
$

0 コメント:

コメントを投稿