2014年6月14日土曜日

開発環境

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

その他参考書籍

問題 3.5.

コード(BBEdit, Emacs)

sample3_3.scm

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

;; random-integerを使う
(use srfi-27)

(define (monte-carlo trials experiment)
  (define (iter trials-remaining trials-passed)
    (cond ((= trials-remaining 0)
           (/ trials-passed trials))
          ((experiment)
           (iter (- trials-remaining 1)
                 (+ trials-passed 1)))
          (else
           (iter (- trials-remaining 1)
                 trials-passed))))
  (iter trials 0))

(define (random-in-range low high)
  (let ((range (- high low)))
    (+ low (random-integer range))))

(define (estimate-integral pred x1 x2 y1 y2 trials)
  (* (* (- x2 x1)
        (- y2 y1))
     (monte-carlo trials
                  (lambda ()
                    (pred (random-in-range x1 x2)
                          (random-in-range y1 y2))))))

(define (estimate-pi trials)
  (estimate-integral (lambda (x y) (<= (+ (* x x)
                                          (* y y))
                                       1))

                     -1 1 -1 1
                     trials))

;; テスト
(for-each (lambda (trials)
            (print (estimate-pi trials)))
          (list 100.0 1000.0 10000.0 100000.0 1000000.0))

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

$ ./sample3_5.scm 
3.0
2.94
3.038
3.00088
3.0012
$

0 コメント:

コメントを投稿