Scheme 我能';I don’我似乎没有把心思放在呼叫/抄送计划上

Scheme 我能';I don’我似乎没有把心思放在呼叫/抄送计划上,scheme,call,continuations,callcc,Scheme,Call,Continuations,Callcc,有人对它的工作原理有很好的指导吗?有视觉辅助的东西会很好,我遇到的每一个指南似乎都说了同样的话,我需要一个新的想法。看看续集的部分——它非常“实用” 它使用了一个“黑洞”的可视化方法来进行延续,这可以帮助你 理解它。这是留在CS实验室白板上的图表。所以你要去拿些苹果,然后在开始之前抓取一个续集。你在森林中漫步,收集苹果,最后你把你的续集应用到你的苹果上。突然,你发现自己在进入森林之前的位置,除了你所有的苹果 我想可能涉及到成年礼和埋金。学习call/cc没有捷径。阅读或中的章节。我发现它有助于

有人对它的工作原理有很好的指导吗?有视觉辅助的东西会很好,我遇到的每一个指南似乎都说了同样的话,我需要一个新的想法。

看看续集的部分——它非常“实用” 它使用了一个“黑洞”的可视化方法来进行延续,这可以帮助你
理解它。

这是留在CS实验室白板上的图表。所以你要去拿些苹果,然后在开始之前抓取一个续集。你在森林中漫步,收集苹果,最后你把你的续集应用到你的苹果上。突然,你发现自己在进入森林之前的位置,除了你所有的苹果


我想可能涉及到成年礼和埋金。

学习call/cc没有捷径。阅读或中的章节。

我发现它有助于可视化调用堆栈。计算表达式时,请在每一步跟踪调用堆栈。(参见示例)这一点一开始可能不直观,因为在大多数语言中,调用堆栈是隐式的;你不能直接操纵它


现在把continuation看作是保存调用堆栈的函数。调用该函数时(使用值X),它会还原保存的调用堆栈,然后将X传递给它。

从不喜欢调用/cc的可视化表示,因为我无法将其反映回代码中(是的,想象力很差);)

无论如何,我认为如果您已经熟悉其他语言中的异常,那么使用call/cc而不是call/ec(escape continuation)开始比较容易

以下是一些应计算为值的代码:

(lambda (x) (/ 1 x))
如果x等于“0”怎么办?在其他语言中,我们可以抛出异常,scheme呢? 我们也可以扔

(lambda (x) (call/ec (cont) 
 (if (= x 0) (cont "Oh noes!") (/ 1 x))))
call/ec(以及call/cc)在这里的作用类似于“try”。在命令式语言中,只需返回值或抛出异常,就可以轻松跳出函数。 在功能上,你不能跳出,你应该评估一些东西。然后打电话来营救。 它用一个参数将“call/ec”下的表达式表示为函数(在本例中称为“cont”)。调用此函数时,它将替换对其参数的整个调用/*

因此,当
(cont“Oh noes!”)
替换
(call/ec(cont)(if(=x 0)(cont“Oh noes!”)(/1 x))
“Oh noes!”
字符串时


call/cc和call/ec几乎相等,只是ec更易于实现。它只允许向上跳,而cc可以从外侧跳下。

请把问题弄清楚一点,你是指“连续传球方式”吗?用电流呼叫-continuation@Afnan当前位置这个问题应该非常清楚。“什么是
call/cc
?”-他还能补充什么?真的,你能得到比地下虫洞更好的视觉帮助吗?问题是:如果你不理解连续体,你就无法理解图片。另一方面,这是一个很好的可视化+1knivil:我从来没有说过这是一个很好的解释,但我觉得它应该保存在这里,留给子孙后代。弗里德曼式的时间隧道!不过,我从未见过熊的变化。我很确定这是达斯汀的画。你可能想修复你的链接,因为它们都指向同一来源。新版本已经发布。在作者最近的Brown plus在线课程中使用。
(lambda (x) (call/ec (cont) 
 (if (= x 0) (cont "Oh noes!") (/ 1 x))))