2

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

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

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

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

4

1 回答 1

3

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

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

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

于 2017-07-20T18:27:09.190 回答