我正在创建一种玩具动态语言(偏向于 javascript),虽然我的实现是在 DLR 之上,但我认为这个问题的解决方案与语言/平台无关。
我对编译递归函数或彼此相邻的相互递归函数没有问题。但是编译嵌套的相互递归函数要困难得多。
我用来测试的示例函数如下
void f(int x) {
void g(int y) {
if((x + y) < 100) {
f(x + y);
} else {
print(x + y);
}
}
g(x);
}
我认为解决这个问题的解决方案必须非常通用(也许我错了)而不是特定于 DLR,我假设我必须以某种方式解除g的内部定义并在f之前定义它并仍然保持关闭语境。