]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex3_5.rkt
Solutions to 4.27, 4.28 and 4.29.
[sicp.git] / src / sicp / ex3_5.rkt
1 #lang racket
2
3 (define (monte-carlo trials experiment)
4   (define (iter trials-remaining trials-passed)
5     (cond 
6       ((= trials-remaining 0) (/ trials-passed trials))
7       ((experiment) (iter (- trials-remaining 1) (+ trials-passed 1)))
8       (else (iter (- trials-remaining 1) trials-passed))))
9   (iter trials 0))
10
11 (define (square x)
12   (* x x))
13
14 (define (random-in-range low high)
15   (let ((range (- high low)))
16     (+ low (random range))))
17
18 (define (P x y)
19   (define (inside-circle? radius centre-x centre-y)
20     (<= (+ (square (- x centre-x))
21            (square (- y centre-y)))
22         (square radius)))
23   (inside-circle? 1.0 0 0))
24
25 (define (estimate-integral P x1 x2 y1 y2 trials)
26   (define (in-region)
27     (let ((x (random-in-range x1 x2))
28           (y (random-in-range y1 y2)))
29       (P x y)))
30   (define (rectangle-area x1 x2 y1 y2)
31     (* (- x2 x1) (- y2 y1)))
32   
33   (* (monte-carlo trials in-region) 
34      (rectangle-area x1 x2 y1 y2)))
35