【发布时间】:2011-08-25 13:44:57
【问题描述】:
我已经用 C/C++ 的邪恶组合编写了一个小型 Scheme 解释器,但我还没有实现 proper tail calls。
我知道经典的Cheney on the MTA algorithm,但是还有其他很好的实现方式吗?我知道我可以将 Scheme 堆栈放在堆上,但这仍然不是适当的消除,因为标准规定应该支持无限数量的活动尾调用。
我也玩过 longjmps,但到目前为止,我认为它只适用于非相互 recursive 尾调用。
主要的基于 C 的方案如何实现正确的尾递归?
【问题讨论】:
-
我看到有人问了一个非常相似的问题:stackoverflow.com/questions/5986058/…
-
我发现 Peter Norvig 的原始 JScheme 用一个简单的蹦床很好地实现了这一点。在norvig.com/jscheme/Scheme.java 向下滚动到 eval()
标签: c lisp scheme tail-call-optimization trampolines