Name:
Anonymous
2010-06-18 19:34
(define (print-interactive stream)
(if (stream-null? stream)
(begin (display "End")
(newline))
(begin
(display (stream-car stream))
(newline)
(if (equal? (read) 'n)
(print-interactive (stream-cdr stream))
#f))))
(define (stream-append stream1 stream2)
(if (stream-null? stream1)
stream2
(cons
(stream-car stream1)
(lambda ()
(stream-append (stream-cdr stream1) stream2)))))
(define (singleton-stream value)
(cons value
(lambda ()
'())))
(define (stream-repeat obj n)
(cons obj
(lambda ()
(define (inner x)
(if (= x n)
'()
(cons
obj
(lambda ()
(inner (+ 1 x))))))
(inner 0))))
(define (flatten-stream stream)
(cond ((stream-null? stream)
the-empty-stream)
((null? (stream-car stream))
(flatten-stream
(stream-cdr stream)))
((list? (stream-car stream))
(cons (car (stream-car stream))
(lambda ()
(flatten-stream
(cons
(cdr (stream-car stream))
(lambda ()
(stream-cdr stream)))))))
(else
(cons (stream-car stream)
(lambda ()
(flatten-stream (stream-cdr stream)))))))
(define (stream-flatmap proc stream)
(flatten-stream (stream-map proc stream)))