2010-02-25 25 views
2

我想知道为什么嵌套函数调用不起作用。我的Scheme编译器有什么问题?

我正在从他的论文中实现Dybvig的基于堆的模型http://www.cs.indiana.edu/~dyb/pubs/3imp.pdf第3章
我正在使用JavaScript。源代码位于:http://github.com/z5h/zb-lisp
几乎所有的东西都在parser.js中。

运行,在Firefox

  1. 负载的test.html与萤火虫。
  2. Evaluator.newEvaluator()。eval(“scheme code goes here”);
  3. 在代码的末尾留下一些空格,因为解析器现在有点损坏,并且依赖于末尾的空白。 (等待修复)。例如.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)

的问题可能是围绕线其中嵌套的调用被编译,或者可能在框架或应用的代码中。 PDF的第3.4.2节是描述样本实施的地方。

这是一个相当复杂的问题。代码有许多粗糙的边缘。
任何输入表示赞赏。

我很高兴回答我的实施中的任何问题。

+0

如果你可以缩小这个问题的范围,人们可能会更倾向于回答。对SO的问题鼓励“详细和具体” – Jimmy 2010-02-25 03:33:36

+0

希望现在更清楚。我的问题是嵌套函数调用。 – z5h 2010-02-25 03:52:02

回答

0

事实证明我很早就清除了价值肋骨。

改进的代码在我的github上可用。