演習問題3.81, 3.82はパスする.
例題が動くよう,random-numberを,簡単だけど,作ってみた.
;;section3.5.5 (load "./stream.scm") (use srfi-27) (define (average-int a b) (quotient (+ a b) 2)) (define random-numbers (cons-stream 1 (stream-map (lambda (n) (+ 1 (random-integer (average-int 100 n)))) random-numbers))) (stream-ref-print random-numbers 100) (define cesaro-stream (map-successive-pairs (lambda (r1 r2) (= (gcd r1 r2) 1)) random-numbers)) (define (map-successive-pairs f s) (cons-stream (f (stream-car s) (stream-car (stream-cdr s))) (map-successive-pairs f (stream-cdr (stream-cdr s))))) (define (monte-carlo experiment-stream passed failed) (define (next passed failed) (cons-stream (/ passed (+ passed failed)) (monte-carlo (stream-cdr experiment-stream) passed failed))) (if (stream-car experiment-stream) (next (+ passed 1) failed) (next passed (+ failed 1)))) (define pi (stream-map (lambda (p) (sqrt (/ 6 p))) (monte-carlo cesaro-stream 0 0))) (stream-ref pi 15000)