【问题标题】:What exactly are administrative redexes after CPS conversion?CPS 转换后的行政重排究竟是什么?
【发布时间】:2011-01-08 12:36:03
【问题描述】:
在 Scheme 和 CPS 转换的上下文中,我很难确定管理 redexes (lambdas) 到底是什么:
-
所有由 CPS 转换引入的 lambda 表达式
-
仅由 CPS 转换引入的 lambda 表达式,但如果您“手动”或通过更智能的 CPS 转换器进行转换,则不会编写
如果可能,欢迎提供良好的参考。
【问题讨论】:
标签:
scheme
continuations
language-theory
continuation-passing
【解决方案1】:
Redex 代表“可简化表达式”,它是一个不是值的表达式。因此,lambda 不是 redex,但 call 是。
在 CPS 中,管理 redex 是其运算符是连续 lambda 的 redex。这样的 redexes 可以立即减少,因为您知道您正在调用哪个函数。
例如,((lambda (u) ...) foo) 是一个管理 redex,但 (k foo) 不是。
【解决方案2】:
我想我找到了答案。
(编辑:我已经接受了 dimvar 的答案,它更短更正确。)
假设输入程序不是完全的 CPS,至少有一个程序返回点必须通过 CPS 转换转换为一个延续。因此,这种延续是由 和 必要的转换引入的。因为这是必要的,所以您总是需要这样做,例如在手动转换时也是如此。因此,管理式 redexes 只是 CPS 转换引入的那些不是真正必要的 lambdas(我的第二个定义)。
我找到了一个 paper,它是这样解释的(强调我的):
CPS 中的朴素 λ 编码,
然而,产生了相当令人印象深刻的
lambda 的膨胀,大多数
形成可以
安全地减少。行政的
减少收益率 CPS 条款
对应于一个人可以写的
用手。因此成为了一个
消除尽可能多的挑战
尽可能地进行行政复议,在
CPS-转换时间。
当然,欢迎任何评论或建议。