DrRacket上的方案表达错误,但在其他解释器上正确评估

时间:2019-07-20 10:52:24

标签: scheme racket

以下表达式在DrRacket上失败,但在其他Scheme解释器上成功评估:

(define (f x) (g x))

此特殊形式定义了函数f(x),该函数在被调用时将返回g(x)的调用。 DrRacket抱怨:

  

g:g中的未绑定标识符

但是,在那个阶段不能定义g,因为我只是定义f而不是调用(f)(我可以稍后绑定g,但是可以在调用(f)之前绑定它,这在其他解释器中是完全可以的)

2 个答案:

答案 0 :(得分:1)

当您按下RUN时,它将定义包装为模块并进行编译。它比解释的代码执行更多的流分析,并且知道g将永远不存在,因为整个文件都已被解析。只要定义g球拍就可以了,但是您没有在前后定义球拍,这就是问题所在。

或者,您可以在交互式窗口中输入所有代码。例如。 enter image description here

答案 1 :(得分:1)

如果要在DrRacket中破坏R5RS代码,则需要首先选择R5RS。 在菜单“语言”中,选择菜单项“选择语言...”。 然后在其他语言下选择“ R5RS”。 最后,确保未选中“不允许重新定义初始绑定”。

现在,您将获得与其他实现相同的结果。

enter image description here