【发布时间】:2010-05-13 16:41:46
【问题描述】:
(callcc (fun k -> k 7)) + 3
(callcc (fun k -> 7)) + 3
每个都评估什么以及为什么?
【问题讨论】:
标签: functional-programming callcc
(callcc (fun k -> k 7)) + 3
(callcc (fun k -> 7)) + 3
每个都评估什么以及为什么?
【问题讨论】:
标签: functional-programming callcc
我想这是家庭作业。如果不是,直接说出来,我直接告诉你答案。
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' 是一种更好的表达“接下来会发生什么”的方式,虽然不是更好。
【讨论】: