0

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

这些中的每一个都评估什么以及为什么?

4

1 回答 1

2

我想这是家庭作业。如果不是,就这么说,我会直接告诉你答案。

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

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

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

你现在需要做的就是弄清楚你k用值 7 调用会发生什么。

对于第二个示例,您根本不调用k。由于您没有对 做任何特别的事情k,因此您不应该期望call/cc做任何特别的事情。


注意:您提供的代码看起来像是某种机器学习。我所知道的所有 ML 方言都没有call/cc,所以如果您的方言也没有,请尝试下载PLT Scheme以交互方式使用它。语法并不难掌握。

*'continuation' 是一种更好的表达“接下来会发生什么”的方式,虽然不是更好。

于 2010-05-13T18:17:48.623 回答