【发布时间】:2018-06-16 19:47:29
【问题描述】:
我目前正在学习 Racket(只是为了好玩),我偶然发现了这个例子:
(define doubles
(stream-cons
1
(stream-map
(lambda (x)
(begin
(display "map applied to: ")
(display x)
(newline)
(* x 2)))
doubles)))
它产生 1 2 4 8 16 ...
我不太明白它是如何工作的。
所以它创建 1 作为第一个元素;当我调用 (stream-ref doubles 1) 时,它会创建第二个元素,显然是 2。
然后我调用(stream-ref doubles 2),它应该强制创建第三个元素,所以它为已经有两个元素的流调用stream-map——(1 2)——所以它应该产生(2 4)然后将这个结果附加到流中.
为什么这个stream-map 总是应用于last 创建的元素?它是如何工作的?
感谢您的帮助!
【问题讨论】:
-
您可能对SICP lesson about streams感兴趣
标签: stream scheme racket self-reference sicp