在Scheme和CPS转换的上下文中,我在确定行政redexes(lambdas)的确切含义时遇到了一些麻烦:
如果可能的话,欢迎提供良好的参考。
答案 0 :(得分:5)
Redex代表“简化表达式”,这是一个不是值的表达式。因此,lambda不是redex,而是调用。
在CPS中,管理redex是一个redex,其运算符是continuation lambda。这样的重新索引可以立即减少,因为您知道要调用哪个函数。
例如,((lambda (u) ...) foo)
是管理重新索引,但(k foo)
不是。
答案 1 :(得分:4)
我想我找到了答案。 (编辑:我接受了dimvar的答案,它更短更正确。)
假设输入程序不是完全CPS,则必须通过CPS转换将至少一个过程返回点转换为延续。所以这个延续都是由转换和引入的。因为这是必要的,所以你总是需要这样做,例如在手工转换时也是如此。因此,管理重新索引只是CPS转换引入的那些并非真正必要的lambda(我的第二个定义)。
我找到一个paper就像这样解释它(强调我的):
将幼稚λ编码转换为CPS, 然而,产生了令人印象深刻的 在lambdas中,大多数 形成可以的行政指数 安全地减少。行政的 减少产生CPS条款 对应于人们可以写的东西 用手。因此它成了一个 消除尽可能多的挑战 行政指数尽可能在 CPS转换时间。
当然,任何评论或建议都值得欢迎。