持续传递风格的ANF转换

时间:2017-07-20 15:44:40

标签: scheme continuation-passing

http://matt.might.net/articles/a-normalization/

中给出了将代码从S表达式转换为A正常形式的算法

作者已经做出了不寻常的选择,以连续传递方式编写算法。 (也就是说,并不是中间代码在任何阶段都在CPS中表示,而是用于进行转换的手写代码是用CPS编写的。)

在我能看到它是如何工作的情况下是有意义的,并且延续表示每个生成的let的主体,但直觉上令人惊讶的是,CPS应该是人类编写代码的最清晰的方式。

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

1 个答案:

答案 0 :(得分:3)

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

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

编辑:如果这个答案不会增加你的知识,请提前道歉;可能是我说你已经知道的一切。的Ta!