Exercise 3.52: Consider the sequence of
expressions
(define sum 0)
(define (accum x)
(set! sum (+ x sum))
sum)
(define seq
(stream-map
accum
(stream-enumerate-interval 1 20)))
(define y (stream-filter even? seq))
(define z
(stream-filter
(lambda (x)
(= (remainder x 5) 0)) seq))
(stream-ref y 7)
(display-stream z)
What is the value of sum after each of the above expressions is
evaluated? What is the printed response to evaluating the stream-ref
and display-stream expressions? Would these responses differ if we had
implemented (delay ⟨exp⟩) simply as (lambda () ⟨exp⟩)
without using the optimization provided by memo-proc? Explain.
练习 3.52:考虑以下表达式序列:
(define sum 0)
(define (accum x)
(set! sum (+ x sum))
sum)
(define seq
(stream-map
accum
(stream-enumerate-interval 1 20)))
(define y (stream-filter even? seq))
(define z
(stream-filter
(lambda (x)
(= (remainder x 5) 0)) seq))
(stream-ref y 7)
(display-stream z)
上述每个表达式求值后,sum 的值是多少?对 stream-ref 和 display-stream 表达式求值时,打印的响应是什么?如果我们将 (delay ⟨exp⟩) 简单地实现为 (lambda () ⟨exp⟩) 而不使用 memo-proc 提供的优化,这些响应会有所不同吗?请解释。
(define sum 0)
(define (accum x)
(set! sum (+ x sum))
sum)
(define seq
(stream-map
accum
(stream-enumerate-interval 1 20)))
(define y (stream-filter even? seq))
(define z
(stream-filter
(lambda (x)
(= (remainder x 5) 0)) seq))
(stream-ref y 7)
(display-stream z)