【问题标题】:ANF conversion in continuation passing style连续传球风格的 ANF 转换
【发布时间】:2017-07-20 15:44:39
【问题描述】:

http://matt.might.net/articles/a-normalization/ 给出了将代码从 S 表达式转换为 A 范式的算法

作者做出了不寻常的选择,以延续传递风格编写算法。 (也就是说,不是任何阶段的中间代码都用CPS来表示,而是用CPS来写做转换的手写代码。)

就我所看到的它是如何工作的而言,它是有道理的,并且延续代表每个生成的let 的主体,但直觉上令人惊讶的是,CPS 应该是人类编写代码的最清晰的方式。

这实际上是 ANF 转换算法中最清晰的形式,还是有不使用 CPS 的已知更好的方法?

【问题讨论】:

    标签: scheme continuation-passing


    【解决方案1】:

    我查看了原始论文,并且(基于粗略阅读)那里的转换被表述为一组简单的重写规则。那里没有任何东西可以立即向我表明对 CPS 的需求。查看 Matt Might 的博客文章,他对延续的使用或多或少是香草的;也就是说,它要么被传递给递归调用,要么被“最终结果”调用……除了normalize-name 函数,它在非尾部位置调用k。所以,从技术上讲,这实际上不是完全 CPS。

    无论哪种方式,在我看来,Matt 只是出于习惯在 CPS 中编写它。不过,我打赌他会很乐意回答你的问题;作为一个巨大的医学基金会的负责人,这可能是一个很好的休息。 :)

    编辑:如果这个答案没有增加您的知识,请提前道歉;可能我所说的一切你都已经知道了。哒!

    【讨论】:

    • 实际上,这是一个'嗯,这看起来很奇怪,但也许我的直觉不对,也许我错过了什么',所以你确认我的直觉是正确的,这正是我希望:) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 2012-01-22
    • 1970-01-01
    • 2020-01-04
    • 2019-08-02
    • 2015-12-20
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多