gpt4 book ai didi

scheme - SICP 反流

转载 作者:行者123 更新时间:2023-12-03 23:53:04 24 4
gpt4 key购买 nike

关于 SICP 3.5

我自己的实现如下

(define (delay exp) (lambda () exp))

(define (force delayed-obj)
(delayed-obj))

(define (cons-stream a b) (cons a (delay b)))

(define (stream-car stream) (car stream))


(define (stream-cdr stream) (force (cdr stream)))

(define (take n stream)
(if (= n 0)
(print "0")
(begin (take (- n 1) (stream-cdr stream))
(print n))))

(define (make-stream-enum-interval low high)
(if (> low high)
'()
(begin (print low) (cons-stream low (make-stream-enum-interval (+ low 1) high)))))

实际上我发现它并没有真正延迟。当我执行时(定义范围 10 到 100(make-stream-enum-interval 10 100))。我希望在控制台中只打印 10 个。虽然是 10.....100

我的代码有什么问题吗?或者,如果 print 10...100 是必要的,那么我们可以说结构是 (缺点 10 (延迟 缺点 11(延迟 缺点 12(延迟 ....100)))如果是这样,那么我们需要更多内存吗?

最佳答案

方案使用 eager evaluation .这意味着函数调用的所有参数都在输入函数之前进行评估。因此,由于您的 delay 是一个函数,因此传递给 delay 的表达式首先得到评估。

要解决这个问题,请将 delay 设为宏,就像使用它的任何东西一样(如 cons-stream)。这是将您的 delaycons-stream 重新表述为宏:

(define-syntax delay
(syntax-rules ()
((_ exp) (lambda () exp))))

(define-syntax cons-stream
(syntax-rules ()
((_ a b) (cons a (delay b)))))

关于scheme - SICP 反流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24529271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com