【发布时间】:2021-06-05 01:09:26
【问题描述】:
(define sum 0)
(define (accum x)
(set! sum (+ x sum))
sum)
;1: (define seq (stream-map accum (stream-enumerate-interval 1 20)))
;2: (define y (stream-filter even? seq))
;3: (define z (stream-filter (lambda (x) (= (remainder x 5) 0))
; seq))
;4: (stream-ref y 7)
;5: (display-stream z)
第 1 步:
;1: ==> (cons-stream 1 (stream-map proc (stream-cdr s))(假设 stream-cdr 仅在我们强制此流的 cdr 时评估)
sum 现在是 1
第 2 步:
1 不是甚至,因此(也被记住所以不再添加),它调用(stream-filter pred (stream-cdr stream))。
这将导致
评估cdr 从而实现2 ,因此它应该调用:(cons-stream 2 (stream-cdr stream))。
根据这个答案应该是 1+2 = 3 ,但它是 6
有人可以帮助解释为什么 cdr 的 car 在当前的 cdr 被调用之前实现吗?
【问题讨论】:
标签: stream scheme sicp lazy-sequences