(callcc (fun k -> k 7)) + 3
(callcc (fun k -> 7)) + 3
每个评估的内容是什么?为什么?
答案 0 :(得分:2)
我想这是作业。如果不是,请这样说,我会直接告诉你答案。
call/cc
方式用于捕获被调用点的延续。对于这些示例,这意味着当您看到call/cc
时,用黑框替换整个调用并查看剩下的内容:
(call/cc (fun k -> k 7)) + 3
=>
************************ + 3
所以+ 3
是call/cc
调用的结果。这个“接下来会发生什么”是call/cc
打包并调用k
*。
您现在需要的只是弄清楚当您使用值7调用k
时会发生什么。
对于第二个示例,您根本不会调用k
。由于您没有对k
执行任何特殊操作,因此您不应期望call/cc
执行任何特殊操作。
注意:您提供的代码看起来像某种ML。我所知道的ML方言都没有call/cc
,所以如果你的方言也没有,请尝试下载PLT Scheme以交互方式播放。语法不太难理解。
*'延续'是一种稍微好一点的方式来说“接下来会发生什么”,虽然不是很好。