【发布时间】:2014-07-02 10:52:07
【问题描述】:
关于 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))) 如果是这样,那么我们需要更多内存吗?
【问题讨论】:
-
你也可以使用嘴唇宏
(define-macro (delay . exp) `(lambda () ,@exp))