;3.5
(define (estimate-pi trails)
(sqrt (/ 6 (monte-carlo trails experiment))))
(define (random-in-range low high)
(let ((range (- high low)))
(+ low (random (+ 1 range)))));sicp 中为说明 random是获得 0 - (range-1)的一个数 难怪用sicp的 random-in-range总是错
(define (monte-carlo trails experiment)
(define (iter remain res)
(cond ((= 0 remain) (/ res trails))
((experiment)
(iter (- remain 1) (+ 1 res)))
(else (iter (- remain 1) res))))
(iter trails 0))
(define (fractional trails x1 x2 y1 y2 p)
(define (test-func)
(p x1 x2 y1 y2))
(* (* (- x2 x1) (- y2 y1)) (monte-carlo trails test-func)))
(define (test-func x1 x2 y1 y2)
(< (+ (square (random-in-range x1 x2))
(square (random-in-range y1 y2)))
1))
(define (p x1 x2 y1 y2)
(< (+ (square (random-in-range x1 x2))
(square (random-in-range y1 y2)))
1))
(define the-pi
(lambda (trails x1 x2 y1 y2 p)
(fractional trails x1 x2 y1 y2 p)
))
(define (square x) (* x x))