我用Racket编写了一个程序,现在我必须将我的代码更改为R5RS。但我马上就会犯错误。
我在球拍中有以下代码:
#lang racket
(provide a-function)
(define (a-function)
; Do something
#t)
(define a-variable #t)然后,我将其改为R5RS:
#lang r5rs
(#%provide a-function)
(define (a-function)
; Do something
#t)
(define a-variable #t)现在的问题是,当我运行这个简单的代码并尝试调用过程"a-function“时,它会告诉我a-function: undefined; cannot reference an identifier before its definition。
我注意到这个问题只存在于过程中,变量“a-变量”是已知的,但不知道过程.
编辑:我试图把一个过程伪装成一个变量,看看他是否知道这个过程,但是我得到了同样的错误。
#lang r5rs
(#%provide a-function)
(define a-function (lambda (x y) (+ x y)))我搜索了很多东西,我想问题一定是我还在将自己的Racket代码合并到R5RS中,所以某些文件仍然在R5RS中,其他文件在R5RS中,这是因为我不明白的一个原因(它不应该是一个问题.)
编辑:我尽可能轻松地重构了这个问题:
R5RS文件"a.rkt“:
#lang r5rs
(#%provide makePosition)
(define (makePosition x y)
(cons x y))球拍档案:
#lang racket
(require "a.rkt")
(makePosition 20 10)当运行球拍文件时,这会导致错误“未定义的标识符.”。
,据我的一位老师说,这是个骗人的错误。
发布于 2019-06-23 15:14:44
对于最后一个程序(makePosition),请注意R5RS不区分大小写,因此makePosition被标准化为makeposition。然而,球拍世界是区分大小写的,所以makePosition不存在,makeposition是存在的。
对于其他程序,我真的无法重现这个问题。当你把这个问题发到StackOverflow上时,你有什么改变吗?
https://stackoverflow.com/questions/29261436
复制相似问题