【SICP练习】144 练习3.82

来源:互联网 发布:windows 运行spark 编辑:程序博客网 时间:2024/06/01 10:29

练习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)) 



感谢您的访问,希望对您有所帮助。 欢迎大家关注或收藏、评论或点赞。


为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


5 0
原创粉丝点击