]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex3_74.rkt
Lazy version of evaluator and tests.
[sicp.git] / src / sicp / ex3_74.rkt
1 #lang racket
2
3 (define (make-zero-crossings input-stream last-value)
4   (cons-stream
5    (sign-change-detector (stream-car input-stream) last-value)
6    (make-zero-crossings (stream-cdr input-stream)
7                         (stream-car input-stream))))
8
9 (define (sign-change-detector current-value previous-value)
10   (cond [(and (positive? previous-value)
11               (positive? current-value)) 0]
12         [(and (positive? previous-value)
13               (negative? current-value)) -1]
14         [(and (negative? previous-value?)
15               (positive? current-value)) +1]
16         [else 0]))
17
18 (define zero-crossings (make-zero-crossings sense-data 0))
19
20 ;; eva's implementation
21 (define zc (stream-map sign-change-detector sense-data (cons-stream 0 sense-data)))