gpt4 book ai didi

scheme - 求人为的示例代码: continuations!

转载 作者:行者123 更新时间:2023-12-04 17:42:25 27 4
gpt4 key购买 nike

所以我相信我现在至少在某种程度上理解了延续,这要感谢 community scheme wikiLearn Scheme in Fixnum Days .

但是我想要更多的练习——也就是说,我可以在脑海中完成更多的示例代码(最好是人为的,所以没有多余的东西可以分散这个概念的注意力)。

具体 ,我想解决更多关于恢复和/或协同程序的延续问题,而不是仅仅使用它们退出循环或其他任何东西(这相当简单)。

无论如何,如果你知道除了我上面链接的那些之外的好教程,或者如果你想发布你写的东西,这将是一个很好的练习,我将非常感激!

最佳答案

是的,延续可能非常令人费解。这是我不久前发现的一个很好的谜题 - 尝试找出打印的内容以及原因:

(define (mondo-bizarro)
(let ((k (call/cc (lambda (c) c)))) ; A
(write 1)
(call/cc (lambda (c) (k c))) ; B
(write 2)
(call/cc (lambda (c) (k c))) ; C
(write 3)))

(mondo-bizarro)

解释这是如何工作的(包含剧透!):
  • 第一个call/cc stores 返回它自己的延续并将其存储在 k .
  • 号码1被写入屏幕。
  • 当前继续,即在B点继续,返回k,即返回A
  • 这一次,k 现在绑定(bind)到我们在 B
  • 处得到的延续。
  • 号码1再次写入屏幕
  • 当前延续,即在 B 点继续,返回到 k,这是到另一个 B 点的另一个(但不同)延续
  • 一旦我们回到原来的延续,重要的是要注意这里的 k 仍然绑定(bind)到 A
  • 号码2写入屏幕
  • 当前继续,即在C点继续,返回k,即返回A
  • 这一次,k 现在绑定(bind)到我们在 C
  • 处得到的延续。
  • 号码1再次写入屏幕
  • 当前继续,即在B点继续,返回k,返回C
  • 号码3写入屏幕
  • And you're done

  • 因此,正确的输出是 11213 .我用粗体表示的最常见的症结点 - 重要的是要注意,当您使用延续来“重置” k 的值时,它不会影响原始延续中的 k 值。一旦你知道它变得更容易理解。

    关于scheme - 求人为的示例代码: continuations!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/758088/

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