Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme SICP中对评价者的矛盾假设_Scheme_Sicp - Fatal编程技术网

Scheme SICP中对评价者的矛盾假设

Scheme SICP中对评价者的矛盾假设,scheme,sicp,Scheme,Sicp,练习1.6使用cond定义新的if: (define (new-if predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause))) 当在递归中调用时,这个newif将落入无限循环 示例sqrt iter说明了一个事实,即参数在传递到用户定义的函数后立即进行求值 3.5中引入的(无限)流也定义为一个函数: (define (cons-stream a b) (co

练习1.6使用
cond
定义
新的if

(define (new-if predicate then-clause else-clause)
  (cond (predicate then-clause)
        (else else-clause)))
当在递归中调用时,这个
newif
将落入无限循环

示例
sqrt iter
说明了一个事实,即参数在传递到
用户定义的
函数后立即进行求值

3.5中引入的(无限)
流也定义为一个函数:

(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
中相同的求值器,您将无法使其工作,因为
(从n开始的整数)
将始终求值
(从(+n 1开始的整数))
,显然,无论
延迟如何实现,它都没有结束

SICP假设这样的评估器适用于
cons-stream
,但不适用于
new if
,这是矛盾的吗?

Cons-stream
是一种特殊形式,定义如下:

(cons-stream <a> <b>)
实际上,您可以将
newif
定义为宏,它也可以正常工作:

(define-syntax new-if
  (syntax-rules ()
    ((new-if predicate then-clause else-clause)
     (cond (predicate then-clause)
           (else else-clause)))))
:

Cons-stream
是一种特殊形式,定义如下:

(cons-stream <a> <b>)
实际上,您可以将
newif
定义为宏,它也可以正常工作:

(define-syntax new-if
  (syntax-rules ()
    ((new-if predicate then-clause else-clause)
     (cond (predicate then-clause)
           (else else-clause)))))