在计划和 消费者保护计划 转换,我在决定什么管理方面遇到了一些麻烦 还原 (lambda)确切地说是:

  • 全部 CPS 转换引入的 lambda 表达式
  • 仅有的 CPS 转换引入的 lambda 表达式,但如果您“手动”或通过更智能的 CPS 转换器进行转换,则无需编写

如果可能的话,欢迎提供好的参考。

有帮助吗?

解决方案

Redex 代表“可约表达式”,它是一个不是值的表达式。因此,lambda 不是 redex,而是调用。
在 CPS 中,管理 Redex 是其运算符为延续 lambda 的 Redex。这样的 redexes 可以立即减少,因为你知道你正在调用哪个函数。
例如, ((lambda (u) ...) foo) 是一个管理 redex,但是 (k foo) 不是。

其他提示

我想我找到了答案。(编辑: 我已经接受了迪姆瓦的答案,它更短,更正确。)

假设输入程序不是完全CPS,则至少一个过程返回点必须通过CPS转换转换为延续。所以这个延续都是由转换引入的 必要的。因为这是必要的,所以您总是需要这样做,例如在手动转换时也是如此。因此,管理 redexe 只是 CPS 转换引入的那些并非真正必要的 lambda(我的第二个定义)。

我找到了一个 这样解释(强调我的):

但是 最多 可以安全地减少的行政重新划分。管理减少产生的CPS项与可以手动写的相对应。因此,在CPS转换时间,消除尽可能多的管理重新换件已成为一个挑战。

不过,当然欢迎任何评论或建议。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top