(define get-first
(lambda (l)
(call-with-current-continuation
(lambda (here)
(set! leave here)
(waddle l)
(leave (quote ()))))))
(define get-first
(lambda (l)
(call-with-current-continuation
(lambda (here)
(set! leave here)
(leave (waddle l))))))
对于任何不熟悉“The Seasoned Schemer”一书的人来说get-first
,get-next
、 和waddle
(最后两个未在此处定义)显然是对协程建模以遍历传递给仅产生叶子的树的过程。waddle
就在waddle
倒数第二次重新进入的 yield 之前,它将重新进入点设置为它只会返回纯值的位置,即is的实际值而'()
不是yield ,就好像它是一直都是纯函数。 '()
waddle
'()
考虑到这一点,我们可以看到get-first
设置了什么......当waddle
返回“真实”时,它将在call/cc
in内部get-first
,然后(leave (quote ()))
是get-first
(并且,反过来,这leave
旨在返回到get-next
最后一次迭代,因此,它是)get-next
的“实际”回报'()
。
那么为什么第二个版本不等价,其中waddle
的值'()
将是 的参数leave
?