这个callcc示例如何工作?

时间:2010-05-13 16:41:47

标签: functional-programming callcc

(callcc (fun k -> k 7)) + 3
(callcc (fun k -> 7)) + 3

每个评估的内容是什么?为什么?

1 个答案:

答案 0 :(得分:2)

我想这是作业。如果不是,请这样说,我会直接告诉你答案。

call/cc方式用于捕获被调用点的延续。对于这些示例,这意味着当您看到call/cc时,用黑框替换整个调用并查看剩下的内容:

(call/cc (fun k -> k 7)) + 3
=>
************************ + 3

所以+ 3call/cc调用的结果。这个“接下来会发生什么”是call/cc打包并调用k *。

您现在需要的只是弄清楚当您使用值7调用k时会发生什么。

对于第二个示例,您根本不会调用k。由于您没有对k执行任何特殊操作,因此您不应期望call/cc执行任何特殊操作。


注意:您提供的代码看起来像某种ML。我所知道的ML方言都没有call/cc,所以如果你的方言也没有,请尝试下载PLT Scheme以交互方式播放。语法不太难理解。

*'延续'是一种稍微好一点的方式来说“接下来会发生什么”,虽然不是很好。