# weima learns to program

my attempt to do the exercises in sicp.

## Thursday, January 6, 2011

### sicp exercise 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.

;; get-random-stream is a procedure which generates a stream of random pairs of (x,y) which lie within x1 y1 x2 y2

(define (estimate-integral integral x1 x2 y1 y2)
(define input (get-random-stream x1 x2 y1 y2))
(define area (abs (* (- x1 x2) (- y1 y2))))
(define (iter passed total in-stream)
(let ((x (car (stream-car in-stream)))
(y (cdr (stream-car in-stream))))
(if (integral x y)
(cons-stream (* area (/ (+ passed 1) (+ 1 total)))
(iter (+ 1 passed) (+ 1 total) (stream-cdr in-stream)))
(cons-stream (* area (/ passed (+ 1 total)))
(iter passed (+ 1 total) (stream-cdr in-stream))))))
(iter 0 0 input))