【发布时间】:2010-02-25 02:55:52
【问题描述】:
我想知道为什么嵌套函数调用不起作用。
我正在实现 Dybvig 的基于堆的模型,来自他的论文 http://www.cs.indiana.edu/~dyb/pubs/3imp.pdf 第 3 章。
我正在用 JavaScript 做。来源在这里:http://github.com/z5h/zb-lisp
现在几乎所有东西都在 parser.js 中。
要运行,
- 使用 Firebug 在 Firefox 中加载 test.html。
- Evaluator.newEvaluator().eval("scheme code goes here");
- 在代码末尾留一些空格,因为解析器现在有点损坏并且依赖于末尾的空格。 (等待修复)。例如
.eval("12 ")不是.eval("12")
很多东西都有效。但是我遇到了嵌套函数调用的问题:
这有效并返回5:(set! i (lambda (x) x)) (set! ii (i i)) (ii 5)
这不起作用:(set! i (lambda (x) x)) (i (i 5))
这也不是:(set! i (lambda (x) x)) ((i i) 5)
问题可能在编译嵌套调用的第 577 行附近,或者可能在 frame 或 apply 的代码中。 PDF 的第 3.4.2 节描述了示例实现。
这是一个相当复杂的问题。代码有许多粗糙的边缘。
任何意见表示赞赏。
我很乐意回答我的实施问题。
【问题讨论】:
-
如果你能把问题缩小一点,人们可能更愿意回答。鼓励有关 SO 的问题“详细而具体”
-
希望现在更清楚了。我的问题是嵌套函数调用。
标签: javascript compiler-construction scheme