CPS转换后的管理重新索引究竟是什么?

时间:2010-01-23 09:21:05

标签: scheme continuations language-theory continuation-passing

在Scheme和CPS转换的上下文中,我在确定行政redexes(lambdas)的确切含义时遇到了一些麻烦:

  • 所有由CPS转换引入的lambda表达式
  • 由CPS转换引入的lambda表达式,但如果您“手动”或通过更智能的CPS转换器进行转换,则不会写入

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

2 个答案:

答案 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转换时间。

当然,任何评论或建议都值得欢迎。