标签: scheme racket
以下表达式在DrRacket上失败,但在其他Scheme解释器上成功评估:
(define (f x) (g x))
此特殊形式定义了函数f(x),该函数在被调用时将返回g(x)的调用。 DrRacket抱怨:
g:g中的未绑定标识符
但是,在那个阶段不能定义g,因为我只是定义f而不是调用(f)(我可以稍后绑定g,但是可以在调用(f)之前绑定它,这在其他解释器中是完全可以的)
答案 0 :(得分:1)
当您按下RUN时,它将定义包装为模块并进行编译。它比解释的代码执行更多的流分析,并且知道g将永远不存在,因为整个文件都已被解析。只要定义g球拍就可以了,但是您没有在前后定义球拍,这就是问题所在。
g
或者,您可以在交互式窗口中输入所有代码。例如。
答案 1 :(得分:1)
如果要在DrRacket中破坏R5RS代码,则需要首先选择R5RS。 在菜单“语言”中,选择菜单项“选择语言...”。 然后在其他语言下选择“ R5RS”。 最后,确保未选中“不允许重新定义初始绑定”。
现在,您将获得与其他实现相同的结果。