(define (mydelay expression)
;delay过程
(memo_proc (lambda () expression)))
(define (cons_stream a b)
(cons a (mydelay b)))
(define (stream_car stream) (car stream))
(define (stream_cdr stream) (myforce (cdr stream)))
一 输入
(define x (cons_stream 'a (cons_stream 'b '())))
其中x应为(cons 'a (mydelay (cons 'b (mydelay '()))))
二 运行:
(define y (stream_cdr x))
输出结果如上所示,首先(stream_cdr x)的原型为(myforce (cdr x)),而后将(cdr x)也就是
(mydelay (cons 'b (mydelay '())))做为参数传递给myforce函数,并运行(
(mydelay (cons 'b (mydelay '())))),因为mydelay外有两个括号,全部会运行memo_proc 函数中的lambda函数,因为cons_stream造成时,将每一个proc的already_run?和result都设为了false,因此会运行test 1的程序。
{注意: 每一个不一样的proc都有一个对应的already_run?和result,即单射,例如,运行(
cons_stream 'b '())会造成(lambda() (
cons_stream 'b '()))这样的proc,而后运行let运算。当运行
(cons_stream 'a (cons_stream 'b '()))时,会造成
(lambda()
(cons_stream 'a (cons_stream 'b '()))这样的proc,而后进行let运算,将此
proc对应的
already_run?和
result设为
false
)
}
3、运行:
(stream_cdr x)
咱们发现运行了test2的程序,这是应为当运行
memo_proc 函数中的lambda函数时,因为在运行
(define y (stream_cdr x))
的程序时,将其对应的proc也就是
(lambda()
(cons_stream 'a (cons_stream 'b '()))的
already_run?已经设为了true,而且结果也求了出来,因此当遇到一样的proc时,会执行test2程序。