From b20c05d6dfc962b6e9b4c868b1236a750148cfe6 Mon Sep 17 00:00:00 2001 From: Felix Martin Date: Wed, 13 Jan 2021 04:23:34 -0500 Subject: [PATCH] Implement 3.81 --- ex-3_73-82.scm | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/ex-3_73-82.scm b/ex-3_73-82.scm index 9d6d201..764c1a3 100644 --- a/ex-3_73-82.scm +++ b/ex-3_73-82.scm @@ -148,7 +148,38 @@ (define RLC1 (RLC 1 1 0.2 0.1)) (display "[ok]\n") -(display "\nex-3.81\n") +(display "\nex-3.81 - random-stream\n") + +(define (make-random-stream request-stream) + (define a 1664525) + (define c 1013904223) + (define m (expt 2 32)) + (define new-random-stream + (cons-stream + 0 + (stream-map (lambda (x) (modulo (+ (* a x) c) m)) + new-random-stream))) + (define (result-stream request-stream random-stream) + (cond + ((eq? (stream-car request-stream) 'gen) + (cons-stream (stream-car random-stream) + (result-stream (stream-cdr request-stream) + (stream-cdr random-stream)))) + ((eq? (stream-car request-stream) 'reset) + (result-stream (stream-cdr request-stream) new-random-stream)) + (else (error "Unsupported request")))) + (result-stream request-stream new-random-stream)) + +(define requests + (cons-stream + 'gen (cons-stream 'gen (cons-stream 'gen (cons-stream 'reset (cons-stream 'gen + (cons-stream 'gen (cons-stream 'gen requests)))))))) + +(define rs (make-random-stream requests)) + +(assert (take 10 rs) + (take 10 rs)) (display "\nex-3.82\n") +