Scheme 寻找人为的示例代码:continuations!

Scheme 寻找人为的示例代码:continuations!,scheme,continuations,coroutine,Scheme,Continuations,Coroutine,所以我相信我现在理解了延续,至少在某种程度上,多亏了和 但我希望有更多的实践——也就是说,我可以在头脑中处理更多的示例代码(最好是人为的,这样就不会有多余的东西干扰这个概念) 具体地说,我想解决更多关于继续和/或协同路由的问题,而不仅仅是使用它们来退出循环或其他什么(这相当简单) 无论如何,如果你知道除了我上面链接的那些教程之外,还有一些不错的教程,或者如果你想发布一些你写的东西,这将是一个很好的练习,我将非常感激 是的,连续剧可能会让人心烦意乱。这是我不久前发现的一个很好的谜题-试着找出打印的

所以我相信我现在理解了延续,至少在某种程度上,多亏了和

但我希望有更多的实践——也就是说,我可以在头脑中处理更多的示例代码(最好是人为的,这样就不会有多余的东西干扰这个概念)

具体地说,我想解决更多关于继续和/或协同路由的问题,而不仅仅是使用它们来退出循环或其他什么(这相当简单)


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

是的,连续剧可能会让人心烦意乱。这是我不久前发现的一个很好的谜题-试着找出打印的内容以及原因:

(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
    存储返回它自己的延续并存储在
    k
  • 将数字
    1
    写入屏幕
  • 将在点B继续的当前延续返回到k,k返回到A
  • 这一次,k现在与我们在B得到的延拓有关
  • 数字
    1
    再次写入屏幕
  • 将在点B继续的当前延续返回到k,这是到另一点B的另一个(但不同)延续
  • 一旦我们回到原来的延续,需要注意的是,这里k仍然绑定到A
  • 将数字
    2
    写入屏幕
  • 将在点C继续的当前延续返回到k,k返回到A
  • 这一次,k现在是C的延拓
  • 数字
    1
    再次写入屏幕
  • 将在点B继续的当前延续返回到k,k返回到C
  • 将数字
    3
    写入屏幕

  • 因此,正确的输出是
    11213
    。我在粗体文本中指出的最常见的症结——需要注意的是,当使用continuations“重置”k值时,它不会影响原始continuation中k的值。一旦你知道它变得更容易理解。

    布朗大学的编程语言课程公开提供。

    嗯,是的,这正在摧毁我的大脑。csi说结果是11213,但我只能理解“112”。。。我一定错过了什么!谢谢,黑体字正是我困惑的地方。让我再试一次……:)再次感谢。这个练习很有帮助。我不是一个聪明人,所以我需要尽可能多的这个!别自责了,我也花了一段时间才明白。绊脚石甚至不是由连续体造成的,而是由Scheme中变量的绑定方式造成的。