(callcc (fun k -> k 7)) + 3
(callcc (fun k -> 7)) + 3
其中每一项的评估结果是什么?为什么?
发布于 2010-05-14 02:17:49
我猜这是家庭作业。如果不是,就说出来,我会直接告诉你答案。
call/cc的工作方式是在它被调用的地方捕获continuation。对于这些示例来说,这意味着当您看到call/cc时,将整个调用替换为一个黑框,并查看剩下的内容:
(call/cc (fun k -> k 7)) + 3
=>
************************ + 3因此,call/cc调用的结果就是+ 3。这个“接下来会发生什么”是call/cc打包并调用k*的东西。
您现在需要做的就是弄清楚使用值7调用k时会发生什么。
对于第二个示例,根本不调用k。由于您不会使用k做任何特殊的事情,所以您不应该期望call/cc会做任何特殊的事情。
注意:您给出的代码看起来像某种ML。我所知道的ML方言都没有call/cc,所以如果您的方言也没有,请尝试下载PLT Scheme来交互地使用它。语法并不难学。
*'continuation‘是一种稍微好一点的方式来表达“接下来会发生什么”,尽管也好不到哪里去。
https://stackoverflow.com/questions/2828582
复制相似问题