gpt4 book ai didi

scheme - 经验丰富的 Schemer 的 get-first、get-next 和 waddle 函数

转载 作者:行者123 更新时间:2023-12-04 20:50:34 25 4
gpt4 key购买 nike

(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))))))

对于任何不熟悉“经验丰富的策划者”一书的人, get-first , get-next , 和 waddle (此处未定义最后两个)是显然对协程建模以遍历传递给 waddle 的树的过程。只产生叶子。就在 waddle 之前的 yield 在倒数第二次重新进入时,它将重新进入点设置为只返回纯值 '() 的位置。即而不是产生 '() ,实际值 waddle'() ,就好像它一直是一个纯函数。

考虑到这一点,我们可以看到 get-first设置...当 waddle返回“真实”,它将在 call/cc 内在 get-first然后 (leave (quote ()))get-first 的值(反过来,此 leave 旨在在最后一次迭代中返回 get-next,因此 get-next 执行 '() 的“实际”返回)。

那么为什么第二个版本不等效,其中 waddle '() 的值将是 leave 的参数?

最佳答案

混淆是因为“leave”不是我想要的函数,而是它在计算时计算的函数,它似乎是从左到右的,因此在“waddle”之前。这意味着它评估为它刚刚设置的值,在前面的语句中。

道德:当使用在函数调用中需要重新定义的函数时要小心!如果这是在从右到左的解释器上,waddle将在符号 leave 之前计算被查找为“离开”到任何地方的函数,在此期间它将被设置为不同的函数。

关于scheme - 经验丰富的 Schemer 的 get-first、get-next 和 waddle 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com