Scheme CPS转换后的行政转帐具体是什么?

Scheme CPS转换后的行政转帐具体是什么?,scheme,continuations,language-theory,continuation-passing,Scheme,Continuations,Language Theory,Continuation Passing,在Scheme和conversion的上下文中,我很难确定什么是管理(lambda): CPS转换引入的所有lambda表达式 只有通过CPS转换引入的lambda表达式,但是如果“手动”或通过更智能的CPS转换器进行转换,则不会编写这些表达式 如果可能的话,欢迎提供一份好的参考资料。我想我找到了我的答案。 (编辑:我接受了dimvar的答案,它更简短、更正确。) 假设输入程序不是完全CPS,则至少有一个程序返回点必须通过CPS转换转换为延续。所以这个延拓既是由转换引入的,也是必要的。因为这

在Scheme和conversion的上下文中,我很难确定什么是管理(lambda):

  • CPS转换引入的所有lambda表达式
  • 只有通过CPS转换引入的lambda表达式,但是如果“手动”或通过更智能的CPS转换器进行转换,则不会编写这些表达式
如果可能的话,欢迎提供一份好的参考资料。

我想我找到了我的答案。 (编辑:我接受了dimvar的答案,它更简短、更正确。)

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

我找到了一个这样的解释(我的重点):

将naîveλ编码为CPS, 然而,它产生了一个相当令人印象深刻的结果 在lambdas方面,其中大部分 形成可以 被安全地还原。行政的 减少产生CPS条款 与一个人所能写的相对应 手工因此,它已成为一项重要的战略 挑战消除尽可能多的 尽可能在以下位置进行管理性重新调整: CPS转换时间

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

Redex代表“可还原表达式”,它不是一个值。因此,lambda不是redex,而是调用。
在CPS中,管理redex是其运算符为延续lambda的redex。这样的重新定义可以立即减少,因为您知道要调用哪个函数。
例如,
((lambda(u)…)foo)
是一个管理性的redex,但
(k foo)
不是。

@Darius:这篇论文是“Beta redex的CPS转换”(我现在正在阅读)。以下是一个链接: