J C*_*per 5 scheme continuations coroutine
所以我相信我现在理解延续,至少在某种程度上,这要归功于Fixnum Days中的社区方案wiki和Learn Scheme.
但是我想要更多的练习 - 也就是说,我可以通过更多的示例代码在我脑海中完成(最好是做作,所以没有多余的东西可以分散注意力).
具体来说,我想解决更多关于继续恢复和/或协同程序的问题,而不是仅使用它们来退出循环或其他任何东西(这是相当简单的).
无论如何,如果你知道除了我上面提到的那些教程之外的好教程,或者如果你想发布你写的那些将是一个很好的练习的东西,我会非常感激!
是的,延续可能非常令人费解.这是我前一段时间发现的一个很好的谜题 - 试着弄清楚打印的内容和原因:
(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)
Run Code Online (Sandbox Code Playgroud)
解释这是如何工作的(包含剧透!):
call/cc商店返回它自己的延续并存储它k.1将写入屏幕.1再次写入屏幕2将写入屏幕1再次写入屏幕3将写入屏幕因此,正确的输出是11213.我在粗体文本中最常见的粘贴点 - 重要的是要注意当你使用continuation'重置'k的值时它不会影响原始延续中k的值.一旦你知道它变得更容易理解.