+#lang racket
+
+(define (make-zero-crossings input-stream last-value)
+ (cons-stream
+ (sign-change-detector (stream-car input-stream) last-value)
+ (make-zero-crossings (stream-cdr input-stream)
+ (stream-car input-stream))))
+
+(define (sign-change-detector current-value previous-value)
+ (cond [(and (positive? previous-value)
+ (positive? current-value)) 0]
+ [(and (positive? previous-value)
+ (negative? current-value)) -1]
+ [(and (negative? previous-value?)
+ (positive? current-value)) +1]
+ [else 0]))
+
+(define zero-crossings (make-zero-crossings sense-data 0))
+
+;; eva's implementation
+(define zc (stream-map sign-change-detector sense-data (cons-stream 0 sense-data)))