gpt4 book ai didi

stream - Racket 流会记住它们的元素吗?

转载 作者:行者123 更新时间:2023-12-04 21:52:09 24 4
gpt4 key购买 nike

从无限流中计算大量数字时,Racket 是否使用记忆化?因此,例如,如果我打印出(也就是计算并显示)无限整数流上的前 400 个数字:
(1 2 3 ... 399 400)
就在我要求在这个无限流上打印前 500 个数字之后。这第二组计算会使用记忆化吗?那么前 400 个数字不会再次计算吗?

或者此功能是否需要由用户编码/从库中获取?

最佳答案

内置racket/stream库使用惰性求值和内存从流中绘制元素:

(require racket/stream)

(define (print-and-return x)
(displayln "drawing element...")
x)

(define (in-range-stream n m)
(if (= n m)
empty-stream
(stream-cons (print-and-return n) (in-range-stream (add1 n) m))))

(define s (in-range-stream 5 10))

(stream-first s)
(stream-first s)
(stream-first (stream-rest s))

传递给 stream-cons 的表达式在使用 stream-first 请求之前不会进行评估或 stream-rest .一旦评估,它们就会被内存。请注意,尽管在 s 上执行了四个流操作,仅显示两个“绘图元素...”消息。

关于stream - Racket 流会记住它们的元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26478167/

24 4 0