(require (lib "27.ss" "srfi"))
(define (square x) (* x x))
(define random random-real)
(define (random-in-range low high)
(let ((range (- high low)))
(+ low (* (random) range))))
(define (monte-carlo trails experiment)
(define (iter trails-remainding trails-passed)
(cond ((= trails-remainding 0)
(/ trails-passed trails))
((experiment)
(iter (- trails-remainding 1) (+ trails-passed 1)))
(else
(iter (- trails-remainding 1) trails-passed))))
(iter trails 0))
(define (estimate-integral p x1 x2 y1 y2 trails)
(if (or (<= x1 0) (<= x2 0) (<= y1 0) (<= y2 0) (< trails 0))
(error "can't process. every arg must be plus")
(* (* (- x2 x1) (- y2 y1))
(monte-carlo trails (lambda () (p
(random-in-range x1 x2)
(random-in-range x1 x2)
(- (/ (+ x1 x2) 2) x1)
(/ (+ x1 x2) 2)
(/ (+ y1 y2) 2)
))))
))
(estimate-integral
(lambda (x y r x0 y0)
(<= (+ (* (- x x0) (- x x0)) (* (- y y0) (- y y0))) (* r r)))
1 3 1 3 100000.0)
(define (p x y) (< x y))
(define (proc hoge fuga)
(newline) (display hoge)
(newline)(display (hoge))
(newline)(display (fuga 3 2))
(newline)
)
(proc (lambda () (p 1 2)) p)
(define (rand)
(define newvalue 0)
(define (generate)
(set! newvalue
(modulo (+ (* newvalue 1664525) 1013904223) 4294967296))
newvalue)
(define (reset y)
(set! newvalue y)
newvalue)
(define (dispatch m)
(cond
((eq? m 'generate) generate)
((eq? m 'reset) reset)
(else (error "can not dispatch!"))
)
)
dispatch)
(define r (rand))
((r 'reset) 3)
((r 'generate ))