码迷,mamicode.com
首页 > 其他好文 > 详细

【SICP练习】144 练习3.82

时间:2015-03-29 16:37:17      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

练习3-82

原文

Exercise 3.82. Redo exercise 3.5 on Monte Carlo integration in terms of streams. The stream version of estimate-integral will not have an argument telling how many trials to perform. Instead, it will produce a stream of estimates based on successively more trials.

代码


 (define (random-in-range low high) 
         (let ((range (- high low))) 
                 (+ low (* (random) range)))) 
 (define (random-number-pairs low1 high1 low2 high2) 
         (cons-stream (cons (random-in-range low1 high1) (random-in-range low2 high2)) 
                                 (random-number-pairs low1 high1 low2 high2))) 

 (define (monte-carlo experiment-stream passed failed) 
         (define (next passed failed) 
                 (cons-stream (/ passed (+ passed failed)) 
                                          (monte-carlo (stream-cdr experiment-stream) 
                                                                   passed 
                                                                   failed))) 
         (if (stream-car experiment-stream) 
                 (next (+ passed 1) failed) 
                 (next passed (+ failed 1)))) 

 (define (estimate-integral p x1 x2 y1 y2) 
         (let ((area (* (- x2 x1) (- y2 y1))) 
               (randoms (random-number-pairs x1 x2 y1 y2))) 
                 (scale-stream (monte-carlo (stream-map p randoms) 0 0) area))) 

 (define (sum-of-square x y) (+ (* x x) (* y y))) 
 (define f (lambda (x) (not (> (sum-of-square (- (car x) 1) (- (cdr x) 1)) 1)))) 
 (define pi-stream (estimate-integral f 0 2 0 2)) 

【SICP练习】144 练习3.82

标签:

原文地址:http://blog.csdn.net/nomasp/article/details/44727559

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!