【问题标题】: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-转换时间。

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

      【讨论】:

      猜你喜欢
      • 2018-01-17
      • 2015-05-01
      • 2015-12-02
      • 2013-06-05
      • 2011-03-03
      • 1970-01-01
      • 2014-10-28
      • 2012-08-27
      • 2010-11-12
      相关资源
      最近更新 更多