【发布时间】:2015-08-29 03:23:28
【问题描述】:
练习 1.6 定义了一个 new-if 和 cond:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause)))
这个new-if 在递归调用时会陷入无限循环。
示例sqrt-iter 说明了参数在传递到user-defined 函数后立即求值的事实。
3.5中引入的(infinite)stream也定义了一个函数:
(define (cons-stream a b)
(cons a
(delay b)))
根据教科书,构建它的关键点是delay。
但是假设你构建了一个流:
(define (intgers-starting-from n)
(cons-stream n
(intgers-starting-from (+ n 1))))
(define integers (intgers-starting-from 1))
使用与new-if 中相同的求值器,您将无法正常工作,因为(intgers-starting-from n) 将始终求值(intgers-starting-from (+ n 1)),而且尽管delay 是如何实现的,它显然没有尽头。
SICP 假设这样的评估器适用于cons-stream 但不适用于new-if,这是否矛盾?
【问题讨论】: