在http://matt.might.net/articles/a-normalization/
中给出了将代码从S表达式转换为A正常形式的算法作者已经做出了不寻常的选择,以连续传递方式编写算法。 (也就是说,并不是中间代码在任何阶段都在CPS中表示,而是用于进行转换的手写代码是用CPS编写的。)
在我能看到它是如何工作的情况下是有意义的,并且延续表示每个生成的let
的主体,但直觉上令人惊讶的是,CPS应该是人类编写代码的最清晰的方式。
这实际上是ANF转换算法中最清晰的形式,还是有一种不使用CPS的已知更好方法?
答案 0 :(得分:3)
我看了一下原始论文,并且(基于粗略的阅读)转换被制定为一组简单的重写规则。那里没有什么可以立即告诉我对CPS的需求。看看Matt Might的博客文章,看起来他对延续的使用或多或少是香草;也就是说,它要么被传递给递归调用,要么被调用“最终结果”... normalize-name
函数除外,它在非尾部位置调用k
。所以,从技术上讲,这实际上并非相当CPS。
无论哪种方式,我认为Matt只是出于习惯而在CPS中写作。不过,我打赌他很乐意回答你的问题;作为一个巨大的医学基金会的负责人,这可能是一个很好的休息。 :)
编辑:如果这个答案不会增加你的知识,请提前道歉;可能是我说你已经知道的一切。的Ta!