(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.0))) (else (iter (- trials-remaining 1) trials-passed)))) (iter trials 0.0)) (define (random-in-range low high) (let ((range (- high low))) (+ low (random range)))) (define (estimate-integral p x1 x2 y1 y2 trials) (define rectangle-area (* (- x2 x1) (- y2 y1))) (define (experiment) (let ((x (random-in-range x1 x2)) (y (random-in-range y1 y2))) (p x y))) (* (monte-carlo trials experiment) rectangle-area)) (define (estimate-pi trials) (estimate-integral (lambda (x y) (< (+ (* x x) (* y y)) 1)) -1.0 1.0 -1.0 1.0 trials)) ; 1 ]=> (map estimate-pi (iota 10 1 1000)) ; ; ;Value: (4. 3.1888111888111887 3.1284357821089457 3.14161946017994 3.1342164458885278 3.1401719656068785 3.1421429761706383 3.1418368804456507 3.1466066741657293 3.15120542161982)