【发布时间】:2020-03-01 03:58:45
【问题描述】:
这是一个与SICP中ex3.51相关的问题,这里是代码
(define (cons-stream x y)
(cons x (delay y)))
(define (stream-car stream) (car stream))
(define (stream-cdr stream) (force (cdr stream)))
(define (stream-map proc s)
(if (stream-null? s)
the-empty-stream
(cons-stream
(proc (stream-car s))
(stream-map proc (stream-cdr s)))))
(define (stream-enumerate-interval low high)
(if (> low high)
the-empty-stream
(cons-stream
low
(stream-enumerate-interval (+ low 1) high))))
(define (stream-ref s n)
(if (= n 0)
(stream-car s)
(stream-ref (stream-cdr s) (- n 1))))
(define (show x)
(display x)
x)
;test
(stream-map show (stream-enumerate-interval 0 10))
输出是012345678910(0 . #<promise>)。
但我认为cons-stream 中的延迟表达式延迟了评估,如果我在stream-map 中使用不同的处理函数,如lambda (x) (+ x 1) 输出(1 . #<promise>) 更合理,那么为什么display 打印所有数字?
【问题讨论】: